WPF привязка Предок - PullRequest
       4

WPF привязка Предок

1 голос
/ 20 апреля 2010

У меня проблемы с привязками. Я хочу использовать UserControl (Intellibox из codeplex), но я получаю только сообщения об ошибках в окне вывода. В основном у меня есть

window grid ... stuff ... usercontrol (self written) ... stuff ... usercontrol (IntelliBox)   

В окне вывода я получаю следующие вещи:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 
  'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.UserControl', 
  AncestorLevel='1''. BindingExpression:Path=ShowResults; DataItem=null; 
  target element is 'Popup' (Name='IntelliboxPopup1'); 
  target property is 'IsOpen' (type 'Boolean')  

Связывание в элементе управления IntelliBox определяется следующим образом:

{Binding Path=ShowResults, RelativeSource={RelativeSource FindAncestor, 
 AncestorType={x:Type UserControl}}}

Я полагаю, что есть проблема, потому что вложенность в usercontrols - как мне исправить эту ошибку?

Спасибо!

1 Ответ

2 голосов
/ 20 апреля 2010

У меня два вопроса.Во-первых, это Binding, который вы написали для своего использования, или это что-то из коробки внутри UserControl, который вы используете?Во-вторых, пытаетесь ли вы привязать к Intellibox или к «самописному» UserControl?

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

Во-первых, при привязке к предку, попробуйте использовать точный тип предка.Например, если вы привязываетесь к Intellibox, используйте AncestorType={x:Type Intellibox}.В противном случае используйте AncestorType={x:Type <YourType>}.Таким образом, ваше связывание будет менее двусмысленным.

Во-вторых, и, пожалуй, лучший ответ в этом случае, это связать желаемый элемент управления по имени, установив x:Name="BindSource (or whatever)" для цели и используя синтаксис Binding:

{Binding Path=ShowResults,
         ElementName=BindSource}

- HTH, Dusty

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