如何在 WPF 依赖项 属性 中使用程序化 'get' 等价物?

How to use a programmatic 'get' equivalent in a WPF dependency property?

这是 clr 的写法 属性:

public byte Value
{
   get{
     return GetByteData();
   }
   set{
     SetByteData(value);
   }
}

我已经阅读了如何以依赖关系 属性 的方式做同样的事情,这就是我自己所能做的:

public byte Value
{
    get { return (byte)GetValue(ValueProperty); }
    set { SetValue(ValueProperty, value); }
}

public static readonly DependencyProperty ValueProperty = DependencyProperty.Register(
    "Value", typeof(byte), typeof(MyControl),
    new FrameworkPropertyMetadata((byte)0, ValueChanged));

public static void ValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    byte r = (byte)e.NewValue;
    MyControl v = (MyControl)d;
    v.SetByteData(r);
}

根据我看过的例子,我从中制作了上面的片段,我找不到放置 GetByteData() 的地方,它计算当前 UI-用户交互时的状态,从而更新'Value'.

之前我一直把它放在 getter 中,就像 clr 一样,但我觉得这是错误的方法,但我可能是错的。我应该把它放在哪里?如果不是,我的方法应该是什么?是否有可能为依赖项 属性 编程 getter?

可能是我一直在使用错误的关键字来寻找解决方案。任何帮助我走向正确方向的帮助将不胜感激。提前致谢。

只要它只是绑定的源(而不是目标)属性,如

{Binding Value, ElementName=MyControlName}

并且您不想通过样式 Setter 应用值,或为值设置动画,属性 不需要是依赖项 属性。

只需像这样实现 INotifyPropertyChanged

public partial class MyControl : UserControl, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public byte Value
    {
       get { return GetByteData(); }
       set
       {
           SetByteData(value);
           PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Value)));
       }
    }

    ...
}