我有一个如下所示的域模型:
* Parent
* ParentProperty1
* ParentProperty2
* Children (an array of Child objects)
* Child
* ChildProperty1
* ChildProperty2
我创建了一个自定义ChildUserControl
,它通过ChildViewModel
绑定到孩子。我的主窗口绑定到ParentViewModel
并包含一个WrapPanel
,该ChildUserControl
为该父母拥有的每个孩子显示一个 <ItemsControl ItemsSource="{Binding Children}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<editor:ChildUserControl DataContext="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
。
该面板的XAML是:
DataContext
此问题是,它会将每个ChildUserControl
的{{1}}设置为原始Child
对象,而不是先将它们包装在ChildViewModels
中。有什么方法可以告诉XAML在绑定过程中为每个子对象创建一个视图模型?还是我的ParentViewModel
需要显式公开ChildViewModels
的可绑定集合?谢谢。
答案 0 :(得分:1)
还是我的ParentViewModel需要显式公开可绑定的ChildViewModels集合?
应该。
在绑定过程中是否可以通过某种方式告诉XAML为每个子对象创建一个视图模型?
否,XAML处理器无法为包装实际子元素的每个子对象创建视图模型。 XAML是一种标记语言。
您可能会使用绑定到子对象并返回子视图模型对象的value converter:
<ItemsControl.ItemTemplate>
<DataTemplate>
<DataTemplate.Resources>
<local:ModelToViewModelConverter x:Key="converter" />
</DataTemplate.Resources>
<editor:ChildUserControl DataContext="{Binding Path=, Converter={StaticResource converter}}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
但是我当然希望从ParentViewModel中公开适当的类型。