我应该绑定到控件的属性,还是应该在 OnPropertyChanged 中更新它们?

Should I bind to Properties of my control, or should I update them in OnPropertyChanged?

假设我有 ControlA,在代码隐藏中我有一些 属性 PropertyA,它们是可绑定属性的实例属性。我想将它们的值传递给在 XAML.

中声明的控件 ControlB 中的 PropertyB

现在我可以像这样绑定到 属性:

<ContentView
  ...
  x:Name="Self">

  <ContentView.Content>
    <ControlB
      x:Name="ConB"
      PropertyB="{Binding Source={x:Reference Self}, Path=PropertyA}/>
  </ContentView.Content>
</ContentView>

或者在后面的代码中这样:

protected override void OnPropertyChanged(string propertyName = null)
{
  if(propertyName == nameof(PropertyA)
  {
    ConB.PropertyB = PropertyA;
  }
}

其中一种方法比另一种更好吗?

我更喜欢第一种情况

原因:将代码放在适用的地方,而不是放在需要

的集中位置
if ... elseif ...

那会变得很乱。

并且如果您正在查看 XAML 以获得 ControlB,没有迹象表明您还需要查看 cs 文件,OnPropertyChanged 方法,以了解影响它的因素。


我唯一会考虑的是,如果它是一个难以在 XAML 中编写的表达式。例如,如果它取决于其他一些条件:

if (someSpecialFlag && ... nameof(PropertyA)) ...

在这种情况下,我会在 cs 代码隐藏文件的顶部放置一个显眼的注释,提醒任何必须维护代码的人 OnPropertyChanged.


它也值得研究 Triggers,作为在 XAML 中表示条件的一种方式。