我正在为我的应用程序使用带有 Prism 和 MEF 的 WPF。需要动态创建控件。这就是我的问题!!
据我所知,我不应该在我的代码中隐藏代码 (SomeFile.xaml.cs) 以使我的代码易于测试。因此,代码实际上应该移至 ViewModel。
但我的代码动态生成 UI 控件。而且我认为 ViewModel 不应该了解控件的任何信息。
那么我应该在哪里以及如何编写这段代码?什么是正确的方法? 希望我说清楚了!
谢谢
最佳答案
使用 WPF/MVVM 时,您的数据层就是您的应用程序(DataContext),您可以使用 Templates
之类的东西告诉 WPF 如何将您的应用程序组件绘制到 UI。
例如,假设您的任务是动态呈现一堆控件。
WinForms 方法可能是遍历对象,为每个对象创建一个 UI 控件,然后将 UI 控件添加到屏幕。
但是对于 WPF/MVVM,您需要创建一个代表每个对象的类(模型
),然后为 WPF 提供要显示的这些类的列表。
WPF 可以使用许多不同的控件来绘制对象列表,但其中最基本的控件可能是 ItemsControl。 .我在 my blog 上有一些简单的 ItemsControl
示例如果你有兴趣。
现在即使您已经为 WPF 提供了要呈现的对象列表,并告诉它使用什么控件来呈现列表,它仍然可能不知道如何绘制您的对象。通常的解决方案是包含某种 XAML 模板来告诉它如何绘制您的对象。
这是一个简单的示例模板,用于告诉 WPF 如何绘制 MyClassObject
类型的对象:
<DataTemplate DataType="{x:Type local:MyClassObject}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Name:" />
<TextBox Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
我希望这能帮助您朝着正确的方向前进:)
关于c# - 使用 Prism、MVVM、MEF 在 WPF 中动态生成控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20888024/