我应该绑定到控件的属性,还是应该在 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
中表示条件的一种方式。
假设我有 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
中表示条件的一种方式。