我想我知道如何实现这一点,但这是非常复杂的东西。首先你应该理解 MVVM 的基本概念。Main ViewModel 应该是一个具有ObservableCollection
ViewModel 的类,每个 ViewModel 代表一个包含其数据和属性的列。
interface IViewModel : INotifyPropertyChanged,IDisposable
{
}
interface IColumnViewModel : IViewModel
{
}
class ViewModelBase : IViewModel
{
// ... MVVM basics, PropertyChanged etc. ...
}
class MainViewModel : ViewModelBase
{
ObservableCollection<IColumnViewModel> Columns {get; set}
}
在视图中,我想像ItemsControl
with之类的东西ItemTemplate
,应该嵌入ContentControl
with DataTemplate
,WPF 会根据DataContext
列表项的绑定自动选择它。StackPanel
本身并不适合,但它可以被调用为ItemsPanelTemplate
<Window
xmlns:v="clr-namespace:WpfApplication.Views"
xmlns:vm="clr-namespace:WpfApplication.ViewModels">
<Window.Resources>
<DataTemplate DataType="{x:Type TypeName=vm:TextColumnViewModel}">
<v:TextColumnView/>
</DataTemplate>
</Window.Resources>
<ItemsControl
ItemsSource="{Binding Columns}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentControl Content="{Binding}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Window>
因此,您应该为每种列类型构建 View/ViewModel 对。
希望,我的例子会有所帮助。祝你女朋友和 MVVM 好运 :)