我需要更新绑定到某个属性的TextBox
。在我实施它的方式中,它运行良好。这是代码
private double foo;
public double Foo
{
get { return foo; }
set
{
foo = value;
RaisePropertyChanged(() => Foo);
}
}
但是现在我需要从另一个属性更新此属性的值,并且不会更新绑定到Foo的TextBox
。这是代码
private string foo1
public string Foo1
{
get { return foo1; }
set
{
foo1 = value;
foo = 4; // Updating the Foo property indirectly
RaisePropertyChanged(() => Foo);
RaisePropertyChanged(() => Foo1);
}
}
我有义务以这种方式更新属性Foo的值,因为Foo和另一个属性相互更新,因此我无法直接更新属性,因为我陷入无限递归。
问题是当我更改属性 foo 的值时,如何更新绑定到 Foo 属性的TextBox
?
答案 0 :(得分:1)
我会说你应该更新Foo
二传手中的公开成员Foo1
。这将导致RaisePropertyChanged
触发Foo
事件。
private string foo1
public string Foo1
{
get { return foo1; }
set
{
foo1 = value;
Foo = 4;
RaisePropertyChanged(() => Foo1);
}
}
每当您更新私人字段RaisePropertyChanged(() => Foo);
时,您都可以致电foo
,但除非有充分的理由不使用该属性Foo
,否则我会一直使用它{{1} }}。 foo
的目的是在属性值发生变化时运行该代码。在我看来,设置私有字段会绕过set
中违反此意图的代码。
修改强>
另一方面,如果您只想呼叫set
并在RaisePropertyChanged
更改时更改Foo
的值(不一定每次设置者都是调用),只需添加一个检查以查看值是否已更改。这将解决您的递归问题。
Foo1