使用Prism,MVVM,MEF在WPF中动态生成控件

Shr*_*oid 2 c# wpf prism mef mvvm

我在我的应用程序中使用带有Prism和MEF的WPF.需要动态创建控件.所以这是我的问题!!

据我所知,我不应该在我的代码中使用代码(SomeFile.xaml.cs)来保持我的代码易于测试.因此代码应该实际移到ViewModel.

但我的代码动态生成UI控件.我不认为ViewModel应该知道有关控件的任何信息.

那么我应该在哪里以及如何编写这段代码?什么是正确的方法?希望我清楚自己!

谢谢

Rac*_*hel 7

使用WPF/MVVM时,您的数据层就是您的应用程序(DataContext),您可以使用类似的Templates方式告诉WPF如何将应用程序组件绘制到UI.

例如,假设您被赋予了动态渲染一组控件的任务.

WinForms方式可能是遍历对象,为每个对象创建UI控件,然后将UI控件添加到屏幕.

但是,对于WPF/MVVM,您将创建一个表示每个对象的类(a Model),并为WPF提供要显示的类的列表.

WPF可以使用许多不同的控件来绘制对象列表,但最基本的可能是ItemsControl.如果你有兴趣ItemsControl,我在博客上有一些简单的例子.

现在即使你给WPF提供了要渲染的对象列表,并告诉它使用什么控件来渲染列表,它仍然可能不知道如何绘制对象.通常的解决方案是包含某种XAML模板,告诉它如何绘制对象.

这是一个简单的示例模板,用于告诉WPF如何绘制类型的对象MyClassObject:

<DataTemplate DataType="{x:Type local:MyClassObject}">
    <StackPanel Orientation="Horizontal">
        <TextBlock Text="Name:" />
        <TextBox Text="{Binding Name}" />
    </StackPanel>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

我希望这有助于让你朝着正确的方向前进:)