Привязка свойства зависимости к другому свойству зависимости - PullRequest
0 голосов
/ 08 июня 2010

Возьмите этот сценарий, когда я работаю с сеткой, подобной элементу управления:

<RadGrid DataContext={Binding someDataContextObject, Mode=OneWay}>
   <RadGrid.columns>
      <RadGrid.Column Header="Column Header"
                            DataMember="{Binding dataContextObjectProperty, Mode=OneWay}">
           [...]
           <DataTemplate>
                <MyCustomControl Data="{Binding ???}" />
           </DataTemplate>
      <\RadGrid.Column>
   </RadGrid.columns>   
</RadGrid>

Я хотел бы связать свойство зависимостей Data MyCustomControl со свойством зависимостей DataMember столбца, чтобы избежать нескольких привязок к одним и тем же данным. Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 11 января 2011

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

  1. Дайте вашему MyCustomControl имя и затем используйте свойство ElementName в вашей привязке для ссылки на него.
  2. Используйте привязку RelativeSource и установите тип предка для типа вашего класса MyCustomControl.
  3. Привязать к свойству вашей RadGrid, например, к тегу, а затем попытаться выполнить привязку в шаблоне данных, чтобы извлечь из свойства тега RadGrid. (Предупреждающий код-запах!)

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

0 голосов
/ 08 июня 2010

Кажется, что не существует простого способа выполнить эту задачу. Проблема в том, что невозможно связать что-либо внутри DataTemplate с чем-то, что находится за пределами шаблона данных. Вы можете найти какой-то обходной путь здесь .

Однако я не думаю, что это заслуживает такого рода усилий. В чем проблема с несколькими привязками к одним и тем же данным?

Как говорится, если что-то так сложно, может быть, вы делаете это неправильно. Вам действительно нужно привязать свой пользовательский элемент управления ко всему контексту данных? По сути, когда вы даете сетке источник данных, он позаботится о том, чтобы выбрать одну строку из контекста данных и установить ее как DataContext для вашего шаблона. Однако, если у вас есть веская причина для этого, вам следует проверить ссылку из первого абзаца.

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

...