WPF绑定未设置为UserControl DependencyProperty

时间:2013-01-25 18:29:34

标签: c# wpf

我有一个ListView,它绑定到一个对象列表。当我在ListView中选择一个项目时,我会捕获一个SelectionChanged事件,然后将所选对象传递给详细信息视图。

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

    detailsView.DataContext = myObject;
}

detailsView是与ListView在同一WPF中的UserControl。它包含一些像这样的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); }
}

Label显示了deviceId,但MyUC中的属性永远不会被设置。

有人能发现我的错误吗?

2 个答案:

答案 0 :(得分:3)

在XAML中使用依赖项属性时,永远不会调用set方法。如果你想“看到”这个集合,你需要添加一个属性更改的回调,因为绑定机制直接设置了依赖属性而没有你的setter。

有关如何实现此操作的详细信息,请参阅PropertyChanged callbacks section of MSDN

答案 1 :(得分:0)

首先,如果您可以在定义ListView及其属性的位置添加实际的XAML代码,将会很有帮助。

其次,您应该查看输出控制台(当然,在Visual Studio调试会话中),看看是否存在关于您定义的绑定的绑定错误。

绑定很可能提供的值不符合deviceId依赖项属性类型,因此它永远不会更改。