我想知道如何从集合中将用户控件添加到窗口中。目前我将我的视图文件夹中的控件添加到网格单元格中。
<views:MyControl Grid.Column="0" Grid.Row="0" Margin="10"/>
我的视图模型中有一个ObservableCollection,它存储了一组用户控件。在我看来,我想从该集合中取一个控件并将其放入我的网格单元格中。我怎样才能像上面那样在网格中添加控件,但是从我的收藏中添加?
例如{Binding Path controls。[1]
答案 0 :(得分:5)
如果某些内容包含一组用户控件,则它不是视图模型。
支持显示其他控件的视图的视图模型应包含这些控件的视图模型的集合。您应该将ItemsSource
的{{1}}绑定到集合属性,然后使用模板匹配和数据模板来创建控件。
因此,我们假设您要在窗口中显示ItemsControl
和FooView
个用户控件的集合。您将创建一个BarView
类和一个FooViewModel
类,然后为资源字典中的每个创建一个数据模板,例如:
BarViewModel
完成此操作后,<Window.Resources>
<DataTemplate x:Key="{Type local:FooViewModel}">
<local:FooView />
</DataTemplate>
<DataTemplate x:Key="{Type local:BarViewModel}">
<local:BarView />
</DataTemplate>
</WindowResources>
绑定到这些视图模型集合的任何ItemsControl
将找到模板,创建控件并将它们绑定到视图模型。
如果您使用的ItemsSource
是ItemsControl
,则可能还有一个额外步骤。任何Grid
生成一个项容器(在ItemsControl
的情况下,它是Grid
)来保存它正在显示的视图;在ContentPresenter
中,您可能需要将Grid
和Grid.Row
分配给该容器。假设您的视图模型具有Grid.Column
和Row
属性,则执行此操作的方法是:
Column