[英]Update Textbox control bound to a property
我需要更新绑定到属性的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
?
我想说您应该在Foo1
设置器中更新公共成员Foo
。 这将导致RaisePropertyChanged
事件为Foo
触发。
private string foo1
public string Foo1
{
get { return foo1; }
set
{
foo1 = value;
Foo = 4;
RaisePropertyChanged(() => Foo1);
}
}
您可以调用RaisePropertyChanged(() => Foo);
每当您更新私有字段foo
,但是除非有充分的理由不使用Foo
属性,否则我总是会在foo
使用它。 set
的目的是在属性值更改时运行该代码。 我认为,设置私有字段会绕过set
中违反此意图的代码。
编辑
另外,如果您只想调用RaisePropertyChanged
并在Foo1
更改时 (不必每次调用setter时) 更改 Foo
的值,只需添加一个检查以查看该值是否已更改。 这将解决您的递归问题。
set
{
if(foo1 != value)
{
foo1 = value;
Foo = 4;
RaisePropertyChanged(() => Foo1);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.