Какой лучший способ привязать флажок заголовка к текстовому тексту пользовательского элемента управления? - PullRequest
2 голосов
/ 25 марта 2012

У меня есть работоспособное решение, но я уверен, что есть лучший способ написать это.

У меня есть пользовательский элемент управления с сеткой данных внутри. ItemsSource таблицы данных имеет значение {Binding Path=MyView}, где MyView является свойством ICollectionView модели представления. Контекст данных пользовательского элемента управления установлен на модель представления.

В сетке данных у меня есть заголовок флажка. Я хочу связать состояние IsChecked флажка со свойством в модели представления.

Это то, что у меня есть, и похоже, что оно работает, но я обеспокоен тем, что это связывание неоправданно сложно. Пользовательский интерфейс довольно простой, поэтому я ожидаю, что связывание будет более простым для написания, чем было.

Есть ли лучший способ выразить такую ​​привязку?

<DataGridTemplateColumn.HeaderTemplate>
    <DataTemplate>
         <CheckBox IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Views:MyUserControlClass}}, Path=DataContext.AllRowsSelected}" />
    </DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>

1 Ответ

2 голосов
/ 25 марта 2012

В таких ситуациях я использую

ElementName=userControl

вместо

RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Views:MyUserControlClass}}

Также вы можете использовать

{Binding Parent.DataContext.AllRowsSelected, ElementName=LayoutRoot}

В этом случае я предполагаю, что LayoutRoot - это имя элемента, родительским элементом которого является пользовательский элемент управления.Parent является его собственностью.Таким образом, привязка устанавливается к свойству DataContext родителя.

Я предпочитаю последний вариант, потому что предоставление имени для пользовательского элемента управления ограничивает его использование.

EDIT

О LayoutRoot .Это имя часто предоставляется для верхнего элемента в Window или UserControl, или просто для некоторого макета:

<Window ...>
    <Grid Name="LayoutRoot">
        ...
    </Grid>
</Window>

В этом имени нет ничего особенного.Просто часто используется.Та же ситуация, что и для псевдонимов пространства имен в xaml: sys (указывает на mscorlib), локально (указывает на пространство имен вашего приложения) и т. Д.

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