c# - 使用 Prism、MVVM、MEF 在 WPF 中动态生成控件

标签 c# wpf mvvm prism mef

我正在为我的应用程序使用带有 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/

相关文章:

c# - 如何在 XAML 中访问我的 ViewModel 的 DependencyProperties?

silverlight - 刷新WP7中的列表框

c# - 为什么ComboBox在WPF MVVM中保留不同的值?

c# - 奇怪的 Windows 7 桌面图标缓存

c# - 处理 ErrorDataReceived 时出现 NullReferenceException - 终止线程

.net - 由于不拥有线程,串行端口读取导致错误

WPF 单选按钮(二)(绑定(bind)到 boolean 值)

c# - 我可以让一个类在内部不密封但在外部密封吗?

c# - 在WPF中创建动态生成的单选按钮时,程序崩溃

c# - 想要 C# 程序启动 WPF 应用程序