2016-11-01 2 views
0

У меня есть странная проблема с привязкой DependecyProperty. Чтобы вопрос простой i've создал фиктивный-контроль, который имеет такое же нежелательное поведение у меня есть UserControl, который имеет DependencyProperty, определенный в коде позадиWPF привязка к функции UserControl DependencyProperty не работает должным образом

:

public static readonly DependencyProperty TestValueProperty = DependencyProperty.Register("TestValue", typeof(string), typeof(Test), new PropertyMetadata(default(string))); 

public string TestValue 
{  
    get { return (string)GetValue(TestValueProperty); } 
    set { SetValue(TestValueProperty, value); } 
} 

используется Это свойство в XAML:

<Label Content="{Binding TestValue}" /> 

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

<views:Test TestValue="{Binding Settings.Setting123}" /> 

Settings определяется как свойство viewmodel.

Но содержимое Settings.Setting123 не отображается на ярлыке пользователя usercontrol.

При написании некоторые исправления значения вместо привязки его прекрасно работает:

<views:Test TestValue="Test" /> 

Но, конечно, я не хочу, фиксированное значение, но содержание связанного объекта. Любой намек на то, что здесь происходит не так?

Заранее благодарен!

+0

Просьба предоставить достаточно кода для воспроизведения проблемы. –

+1

Хотя вы не указали это в своем вопросе, вы, безусловно, установите DataContext UserControl для себя (например,по 'DataContext = this' в его конструкторе). Удалите это и напишите привязки в XAML UserControl с RelativeSource, как показано в ответе Эд. – Clemens

+0

Да, DataContext в UserControl выглядит так: DataContext = "{Binding RelativeSource = {RelativeSource Mode = Self}}" – emvoll

ответ

0

У вас не было достаточного кода для кого-либо, чтобы воссоздать проблему, но, читая между строками, я предполагаю, что Label находится в вашем XAML UserControl. Если TestValue это свойство вашего UserControl, это вероятно, будет работать:

<Label Content="{Binding TestValue, RelativeSource={RelativeSource AncestorType=UserControl}}" /> 

Однако одна причина, вы могли бы сделать, что (и она была полу-работа, с буквальных строк), если вы сделали свой UserControl свой собственный DataContext. В этом случае, , тогда проблема в том, что вы сделали свой UserControl собственными DataContext. Если вы это сделали, то Binding на связанной оценке оценивается в контексте UserControl, который не имеет свойства Settings.Setting123.

Какие DataContext средство управления, в том, что когда у вас есть Binding на одном из элементов управления свойствами или внутри его XAML, вот где Binding идет искать собственности вы связываться. Вы явно говорите, чтобы он выглядел не в том месте.

Если вы сделаете свой UserControl своим собственным DataContext, вы не можете ничего с ним связать. Вот почему вы не должны этого делать. Это похоже на одну из тех машин, которая ничего не делает, кроме как отключить себя от стены. Вместо этого используйте привязки {RelativeSource AncestorType=UserControl}, как указано выше, в XAML UserControl.

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

+0

Да, это в значительной степени выполнило эту работу. Спасибо за помощь! – emvoll

Смежные вопросы