只是想知道DependencyProperties。
通常我在DependencyProperty发生变化后执行某些代码时会看到这种编码标准。
public int SomeProperty
{
get { return (int)GetValue(SomePropertyProperty); }
set { SetValue(SomePropertyProperty, value); }
}
public static readonly DependencyProperty SomePropertyProperty =
DependencyProperty.Register("SomeProperty", typeof(int), typeof(MainWindow), new UIPropertyMetadata(new DependencyPropertyChangedEventHandler(OnSomePropertyChanged)));
private static void OnSomePropertyChanged(object obj, DependencyPropertyChangedEventArgs e)
{
//Some logic in here
}
但我认为我从未见过这种实现 -
public int SomeProperty
{
get { return (int)GetValue(SomePropertyProperty); }
set
{
SetValue(SomePropertyProperty, value);
//Execute code in here
}
}
public static readonly DependencyProperty SomePropertyProperty =
DependencyProperty.Register("SomeProperty", typeof(int), typeof(MainWindow), new UIPropertyMetadata(0));
这被认为是一种不好的做法吗?
谢谢!
答案 0 :(得分:4)
这不是一种不好的做法,这实际上会导致不正确的行为。绑定到XAML中的依赖项属性时,将直接调用SetValue方法,而不是setter。基本上,您无法保证甚至可以执行代码。
来源:http://www.switchonthecode.com/tutorials/wpf-tutorial-introduction-to-dependency-properties
这里有一点注意事项 - 除了电影之外什么也不做 GetValue和SetValue在属性包装器内调用。这是 因为你永远不知道是否有人会通过这个来设置房产 包装,或直接通过SetValue调用 - 所以你不想 在属性包装器中添加任何额外的逻辑。例如,当你设置 在XAML中依赖属性的值,它不会使用 属性包装器 - 它会直接点击SetValue调用,绕过 你碰巧放在属性包装器里的任何东西。