2013-01-25 8 views
1

У меня есть ListView, который привязан к списку объектов. Когда я выбираю элемент в ListView, я поймаю событие SelectionChanged, а затем передаю выбранный объект в режим просмотра деталей.WPF привязка не устанавливается в UserControl DependencyProperty

protected void list_selectionChanged(object sender, SelectionChangedEventArgs e) { 
    var myObject = theList.SelectedItem as MyObjectType; 

    detailsView.DataContext = myObject; 
} 

detailsView - это UserControl в том же WPF, что и ListView. Он содержит некоторые XAML, как так:

<Label Content="{Binding Path=deviceId}"></Label> 
<l:MyUc deviceId="{Binding Path=deviceId}" /> 

Внутри MyUC, у меня DependencyProperty определен:

public static readonly DependencyProperty deviceIdProperty = DependencyProperty.Register("deviceId", typeof(Guid), typeof(MyUC), new FrameworkPropertyMetadata(null)); 

public Guid deviceId { 
    get { return (Guid)GetValue(deviceIdProperty); } 
    set { SetValue(deviceIdProperty, value); } 
} 

Этикетка показывает DeviceId, но свойство внутри MyUC никогда не получает набор.

Может ли кто-нибудь определить мою ошибку?

+0

InotifyPropertyChanged, я думаю, проблема. в функции set событие PropertyChanged должно быть поднято – iltzortz

+0

, если вы скопируете/вставляете свой код, я бы сказал, что проблема может заключаться в том, что вам нужна капитализация P во второй строке вашего xaml (вторая часть кода) – ppetrov

+0

@iltzortz I ' В действительности у меня есть точка останова в наборе этого свойства, и она никогда не вызывается. – bugfixr

ответ

3

Когда вы используете свойство Dependency в XAML, метод set никогда не вызывается. Если вы хотите «увидеть» этот набор, вам нужно добавить свойство измененного обратного вызова, так как механизм привязки напрямую устанавливает свойство зависимостей без вашего сеттера.

Подробнее о том, как это осуществить, см. В разделе PropertyChanged callbacks section of MSDN.

0

Во-первых, было бы полезно, если бы вы могли добавить фактический код XAML, где вы определяете ListView и его свойства.

Во-вторых, вы должны посмотреть на выходную консоль (естественно, на этапе отладки Visual Studio) и посмотреть, есть ли ошибки привязки, которые вы определили.

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

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