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