代码之家  ›  专栏  ›  技术社区  ›  Brian Berns

绑定到XAML中的子ViewModels集合

  •  0
  • Brian Berns  · 技术社区  · 6 年前

    我有一个域模型,如下所示:

    * Parent
      * ParentProperty1
      * ParentProperty2
      * Children (an array of Child objects)
    * Child
      * ChildProperty1
      * ChildProperty2
    

    我创造了一个习惯 ChildUserControl 通过 ChildViewModel . 我的主窗口 ParentViewModel 包含一个 WrapPanel 显示一个 对于父母拥有的每个孩子。

    面板的XAML为:

      <ItemsControl ItemsSource="{Binding Children}">
          <ItemsControl.ItemsPanel>
              <ItemsPanelTemplate>
                  <WrapPanel />
              </ItemsPanelTemplate>
          </ItemsControl.ItemsPanel>
          <ItemsControl.ItemTemplate>
              <DataTemplate>
                  <editor:ChildUserControl DataContext="{Binding}" />
              </DataTemplate>
          </ItemsControl.ItemTemplate>
      </ItemsControl>
    

    DataContext 每一个 生的 Child ChildViewModels 第一。有什么方法可以告诉XAML在绑定过程中为每个子对象创建视图模型吗?或者我的 父视图模型 需要显式公开可绑定的 儿童视图模型

    1 回复  |  直到 6 年前
        1
  •  1
  •   mm8    6 年前

    或者我的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中的适当类型。