Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定到XAML中的子ViewModels集合_C#_Wpf_Xaml_Mvvm_Data Binding - Fatal编程技术网

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
对象。有一个包含子视图模型的视图模型似乎很奇怪,但这也许是最好的方法?