Как использовать вложенные представления в WPF MVVM - PullRequest
4 голосов
/ 01 июня 2011

Привет. Я пытаюсь понять, как лучше всего использовать вложенные представления.

У меня есть представление «Атрибут», которое привязано к коллекции пар «имя-значение» в модели представления.Мне нужно повторно использовать это в различных местах в моем пользовательском интерфейсе.

У меня есть еще один «Просмотр условий», который имеет строковое свойство и коллекцию Dictionary (string, string).Я попытался создать текстовое поле и добавить элемент управления представлением атрибута в XAML

    <StackPanel>
        <StackPanel Orientation="Horizontal">
            <Label Content="{x:Static l:StringResources.ConditionViewLabelText}" />
            <TextBox Text="{Binding Type,Mode=TwoWay}" Width="100" />
        </StackPanel>
        <vw:AttributeView />
    </StackPanel>

. Я хочу связать свойство привязки AttributeView со свойством коллекции словаря (строка, строка) родительской модели представления.,Какой лучший способ сделать это.Я не могу связать vw: AttributeView с ConditionViewModels?

Не могли бы вы сообщить мне наилучшую практику, чтобы сделать это?

- РЕДАКТИРОВАТЬ Пожалуйста, найдите мой AttributeView (Этокод xaml дочернего представления).Шаблон данных привязан к наблюдаемой коллекции в AttributeViewModel

 <StackPanel>
        <ItemsControl ItemsSource="{Binding AllAttributes}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBox Width="100" Text="{Binding Name, Mode=TwoWay}" Margin="5,0,5,0" />
                        <TextBox Width="100" Text="{Binding Value, Mode=TwoWay}" Margin="5,0,5,0" />
                        <TextBlock Width="100" Text="{Binding KeyValue, Mode=OneWay}" />
                        <Button Width="50" Content="{x:Static l:StringResources.AttributeViewButtonDeleteText}" Command="{Binding Path=DataContext.DeleteAttribute, ElementName=AttributeControl}" CommandParameter="{Binding Name}"></Button>
                    </StackPanel>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
        <Button Name="btnSomething" Content="{x:Static l:StringResources.AttributeViewButtonAddText}" Command="{Binding AddNewAttribute}" />
    </StackPanel>
</Grid>

1 Ответ

4 голосов
/ 01 июня 2011

На основании ваших комментариев о том, что ваши родительские / дочерние отношения не отражены в вашей модели представления, у вас есть два варианта:

  1. Создайте отношение в вашей модели представления, чтобы отразить отношение в вашем представлении,позволяя вам переходить от родителя к потомку и наоборот, если вам это нужно.
  2. Используйте привязку RelativeSource FindAncestor для перемещения вверх по визуальному дереву и определения элемента управления, привязанного к родителю.просмотреть модель, привязавшись к этому элементу управления DataContext.

Опция (2) сделает вас умнее, но опция (1) намного проще!

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