Альтернатива RelativeSource для привязки данных - PullRequest
0 голосов
/ 16 марта 2012

Часто у меня возникает такая ситуация:

DataGrid со своими собственными DataContext и DataGridTemplateColumns, в которых мне нужно получить доступ к свойствам из CurrentItem и DataGrid DataContext.В итоге я пишу тонны {Binding DataContext.Something, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}, Mode=FindAncestor}}

Есть ли более красивое или хотя бы меньшее решение для кода?

1 Ответ

0 голосов
/ 17 марта 2012

DataGrid - это ItemsControl, и для каждого отображаемого элемента его DataContext установлен на отображаемый элемент.Совершенно очевидно, что в DataGridXXXColumn вы можете иметь хорошую простую привязку, например,

<DataGridTextColumn Binding="{Binding Name}" Header="Name" />

Но, как вы указали, чтобы добраться до DataContext DataGrid, вам нужно использовать относительную привязку источника.Это может показаться большим количеством Xaml, но я хотел бы предположить, что это то, что вы должны делать.

Единственный способ облегчить Xaml - это сделать ссылку на каждый элемент в коллекциис моделью родительского представления, чтобы вы могли связываться напрямую следующим образом:

<DataGridTextColumn Binding="{Binding Parent.SomeProperty}" Header="???" />

Это решение, но, возможно, не разумное.

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