【发布时间】:2021-12-31 13:26:18
【问题描述】:
假设我有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;
}
}
其中一种方法比另一种更好吗?
【问题讨论】:
-
好吧,当您在 XAML 中绑定它们时,绑定代码会在后台自动生成。每年编写一次有什么好处?
-
看看网上的代码示例和教程——我想说很多,因为很多人告诉别人手写。我想知道它是否有一些意义。
-
顺便说一句,我 总是 有一个用于控件的 (view-)model 类,因此我在 XAML 中绑定到该类 - 在您的示例中我没有看到任何模型类跨度>
-
(FWIW @SirRufo - 我以前总是有一个 ViewModel。但有时这会增加复杂性/编码,但没有足够的好处。最近我一直在尝试将该代码放在第二个
partial class文件中. 所以它的一部分代码在后面,但通过在另一个文件中进行物理分离。) -
我更喜欢第一种情况。原因:将代码放在适用的地方,而不是需要
if ... elseif ...的集中位置。这会变得混乱。如果您正在查看ControlB,您不会意识到您还需要查看OnPropertyChanged方法,以了解影响它的因素。我唯一会考虑的情况是,如果它是一个难以用 XAML 编写的表达式。例如,如果它取决于其他条件。if (someSpecialFlag && ... nameof(PropertyA)).
标签: c# xaml xamarin.forms