Как получить элемент управления содержимым, чтобы представить шаблон данных для выбранного поля в виде сетки WPF? - PullRequest
0 голосов
/ 22 сентября 2009

, поэтому у меня есть следующее определение для элемента управления DataGrid:

<Custom:DataGrid x:Name="dataGrid" ItemsSource="{Binding Units, Mode=Default}" AutoGenerateColumns="False">

и позже в том же документе XAML у меня есть следующий элемент управления содержимым:

<ContentControl Content="{Binding SelectedUnitResults, Mode=TwoWay}"/>

То, что я хотел бы сделать, это привязать элемент управления содержимым к полю SelectedItem [0] .SelectedUnitResults объекта DataGrid (SelectedItem [0] - это ViewModel для DataTemplate, а SelectedUnitResults - поле, имеющее тип также с привязкой DataTemplate)

Любое понимание будет оценено.

1 Ответ

1 голос
/ 23 сентября 2009

Если я вас правильно понял, то сработает следующая привязка:

<Custom:DataGrid x:Name="dataGrid" 
  ItemsSource="{Binding Units, Mode=Default}" 
  IsSynchronizedWithCurrentItem="True"
  AutoGenerateColumns="False">
<ContentControl Content="{Binding Units/SelectedUnitResults}"/>

Предполагая, что ContentControl и DataGrid имеют общий DataContext. Магия происходит с этим символом косой черты в Связывании. Он направляет механизм привязки для получения CurrentItem из коллекции Units и получения из этого значения элемента свойства SelectedUnitResults.

Но подождите, у кого есть CurrentItem? Видите ли, каждый раз, когда вы связываетесь с коллекцией, WPF создает класс-посредник типа CollectionView. Этот медиатор оборачивает оригинальную коллекцию, и цель связана с этим медиатором. WPF не спрашивает, хотите ли вы этого или нет.

Хорошо, но кто обновляет текущий элемент? Селектор (первый потомок ItemsControl) делает. Вы заметили, что свойство IsSynchronizedWithCurrentItem в DataGrid верно? Вот и все.

Подробнее о привязке к коллекциям см. В статье MSDN: Обзор привязки данных - привязка к коллекциям .

Надеюсь, это поможет.

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