私はそれを達成する方法を知っていると思いますが、それは非常に複雑なものです. まず、MVVM の基本概念を理解する必要があります。メイン ViewModel は ViewModel のクラスである必要がありObservableCollection
、それぞれがデータとプロパティを持つ列を表します。
interface IViewModel : INotifyPropertyChanged,IDisposable
{
}
interface IColumnViewModel : IViewModel
{
}
class ViewModelBase : IViewModel
{
// ... MVVM basics, PropertyChanged etc. ...
}
class MainViewModel : ViewModelBase
{
ObservableCollection<IColumnViewModel> Columns {get; set}
}
ビューでは、リスト項目のバインドに従ってWPFによって自動的に選択される、と埋め込む必要があるItemsControl
withのようなものを想定しています。それ自体はそれに適していませんが、次のように呼び出すことができますItemTemplate
ContentControl
DataTemplate
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で頑張ってください:)