如何解决WPF MVVM如何将用户控件从ViewModel的集合添加到View
|| 我想知道如何从集合中向窗口添加用户控件。目前,我正在将控件从“视图”文件夹添加到这样的网格单元中。<views:MyControl Grid.Column=\"0\" Grid.Row=\"0\" Margin=\"10\"/>
我的视图模型中有一个ObservableCollection,它存储了用户控件的集合。在我看来,我想从该集合中获取一个控件并将其放入网格的单元格中。像上面一样,如何从集合中向网格添加控件?
例如,类似于{Binding Path控件。[1]
解决方法
如果某些内容包含用户控件的集合,则它不是视图模型。
支持显示其他控件的视图的视图模型应包含这些控件的视图模型的集合。您应该将ѭ2的ѭ1绑定到collection属性,然后使用模板匹配和数据模板创建控件。
因此,假设您要在窗口中显示
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>
完成此操作后,任何将ѭ1绑定到这些视图模型的集合的ItemsControl
将找到模板,创建控件,并将其绑定到视图模型。
如果您正在使用的ItemsControl
是Grid
,则可能还需要执行其他步骤。任何ItemsControl
都会生成一个项目容器(对于Grid
,它是ContentPresenter
)来保存其显示的视图;在ѭ11中,您可能需要将ѭ16和ѭ17分配给该容器。假设您的视图模型具有Row
和Column
属性,执行此操作的方法是:
<Grid.ItemContainerStyle>
<Style TargetType=\"ContentPresenter\">
<Setter Property=\"Grid.Row\" Value=\"{Binding Row}\" />
<Setter Property=\"Grid.Column\" Value=\"{Binding Column}\" />
</Style>
</Grid.ItemContainerStyle>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。