C# 绑定到XAML中的子ViewModels集合
我有一个域模型,如下所示:C# 绑定到XAML中的子ViewModels集合,c#,wpf,xaml,mvvm,data-binding,C#,Wpf,Xaml,Mvvm,Data Binding,我有一个域模型,如下所示: * Parent * ParentProperty1 * ParentProperty2 * Children (an array of Child objects) * Child * ChildProperty1 * ChildProperty2 我已经创建了一个自定义的ChildUserControl,它通过ChildViewModel绑定到一个孩子。我的主窗口绑定到一个ParentViewModel,并包含一个WrapPanel,为该父对
* Parent
* ParentProperty1
* ParentProperty2
* Children (an array of Child objects)
* Child
* ChildProperty1
* ChildProperty2
我已经创建了一个自定义的ChildUserControl
,它通过ChildViewModel
绑定到一个孩子。我的主窗口绑定到一个ParentViewModel
,并包含一个WrapPanel
,为该父对象拥有的每个子对象显示一个ChildUserControl
面板的XAML为:
<ItemsControl ItemsSource="{Binding Children}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<editor:ChildUserControl DataContext="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
问题在于,它将每个ChildUserControl
的DataContext
设置为原始Child
对象,而不是首先将它们包装在ChildViewModels
中。在绑定过程中,是否有方法告诉XAML为每个子对象创建视图模型?或者我的ParentViewModel
是否需要显式公开可绑定的ChildViewModels
集合?谢谢
或者我的ParentViewModel是否需要显式公开可绑定的ChildViewModels集合
应该这样
在绑定过程中,是否有方法告诉XAML为每个子对象创建视图模型
否,XAML处理器无法为包装实际子元素的每个子元素创建视图模型。XAML是一种标记语言
可以使用绑定到子对象并返回子视图模型对象的:
<ItemsControl.ItemTemplate>
<DataTemplate>
<DataTemplate.Resources>
<local:ModelToViewModelConverter x:Key="converter" />
</DataTemplate.Resources>
<editor:ChildUserControl DataContext="{Binding Path=, Converter={StaticResource converter}}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
但我当然更愿意从ParentViewModel中公开适当的类型
或者我的ParentViewModel是否需要显式公开可绑定的ChildViewModels集合
应该这样
在绑定过程中,是否有方法告诉XAML为每个子对象创建视图模型
否,XAML处理器无法为包装实际子元素的每个子元素创建视图模型。XAML是一种标记语言
可以使用绑定到子对象并返回子视图模型对象的:
<ItemsControl.ItemTemplate>
<DataTemplate>
<DataTemplate.Resources>
<local:ModelToViewModelConverter x:Key="converter" />
</DataTemplate.Resources>
<editor:ChildUserControl DataContext="{Binding Path=, Converter={StaticResource converter}}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
但我当然更愿意从ParentViewModel中公开适当的类型
或者我的ParentViewModel是否需要显式公开可绑定的ChildViewModels集合
:这是更常见的方式,但在我看来,当绑定到子对象
@Stefan时,您已经在这样做了。子对象
是子对象
对象的集合,而不是子视图模型
对象。有一个包含子视图模型的视图模型似乎很奇怪,但也许这是最好的方法?或者我的ParentViewModel是否需要显式地公开可绑定的ChildViewModels集合
:这是更常见的方法,但在我看来,目前绑定到子视图时,您已经这样做了,Children
是Children
对象的集合,而不是ChildViewModel
对象。有一个包含子视图模型的视图模型似乎很奇怪,但这也许是最好的方法?