Привязка к коллекции дочерних ViewModels в XAML - PullRequest
0 голосов
/ 27 августа 2018

У меня есть модель домена, которая выглядит следующим образом:

* 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>

Проблема в том, что он устанавливает DataContext каждого ChildUserControl в необработанный объект Child, вместо того, чтобы сначала обернуть их в ChildViewModels.Есть ли какой-нибудь способ сказать XAML создать модель представления для каждого дочернего объекта во время процесса привязки?Или мой ParentViewModel должен явно предоставлять привязываемую коллекцию ChildViewModels?Благодаря.

1 Ответ

0 голосов
/ 27 августа 2018

Или мой 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...