Предоставление свойств зависимости только для чтения для элемента управления, значения которого поступают от дочерних элементов управления в ControlTemplate - PullRequest
0 голосов
/ 17 марта 2012

У меня есть элемент управления FooControl. Он должен предоставить доступный только для чтения DependencyProperty с именем HasError. Значение этого свойства на самом деле просто значение из элемента управления в ControlTemplate FooControl.

Следующий код выполняет именно то, что я хочу, за исключением того, что он заставляет меня объявлять FooControl.HasError как DependencyProperty для чтения и записи (Binding не может установить значение иначе.)

<ControlTemplate TargetType="FooControl">
    <ChildControl HasError="{Binding HasError, RelativeSource={RelativeSource TemplatedParent}}" />
</ControlTemplate>

Я пытаюсь обойти надоедливые вещи, такие как использование PART_ для поиска дочернего элемента управления, присоединения к его событию HasError ValueChanged и копирования значения. Потому что это противно, и у меня довольно много таких свойств.

1 Ответ

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

Мое лучшее предположение заключается в том, что свойство зависимости ChildControl.HasError определяет параметр метаданных свойства рамки BindsTwoWayByDefault.Это означает, что режим {Binding HasError, RelativeSource={RelativeSource TemplatedParent}} равен TwoWay, который не работает, когда свойство источника доступно только для чтения.

Поэтому измените привязку на

{Binding HasError, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}

Это переопределяет BindsTwoWayByDefault и привязка должна работать.

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