1

这是用户控制背后的代码

 public delegate void YardSelectionChangedDelegate();
 public event YardSelectionChangedDelegate YardSelectionChanged;
 public static readonly DependencyProperty SelectedYardIdProperty =
     DependencyProperty.Register(
         "SelectedYardId",
         typeof(long),
         typeof(YardSelectorUserControl),
         new UIPropertyMetadata(null));

这是属性:

public long SelectedYardId
{
    get { return (long)GetValue(SelectedYardIdProperty); }
    set { SetValue(SelectedYardIdProperty, value); }
}

这是父窗口中的绑定:

SelectedYardId="{Binding  Path=YardId,UpdateSourceTrigger=PropertyChanged}" 

问题是该属性的 Set 永远不会起作用,并且光标永远不会到达 Set 主体。确实谢谢。

4

2 回答 2

3

这是因为绑定引擎不使用您的 set 或 get 访问器来设置或获取属性。它直接使用 DependencyObject 的 SetValue 和 GetValue。为了在更改依赖属性时触发事件,您需要在注册依赖属性时定义回调委托,如下所示:

public static readonly DependencyProperty SelectedYardIdProperty =
    DependencyProperty.Register(
        "SelectedYardId",
        typeof(long),
        typeof(YardSelectorUserControl),
        new UIPropertyMetadata(OnSelectedYardIdChanged));

public static void OnSelectedYardIdChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
     // Action 
}
于 2012-11-21T10:13:36.377 回答
0

也许您应该在模型中实现 INotifyPropertyChanged,并更改“YardId”属性以在“Set”主体中引发 PropertyChanged 事件。

于 2012-11-21T11:10:41.523 回答