更新绑定到属性的Textbox控件

时间:2012-07-11 12:34:45

标签: c# wpf binding textbox prism

我需要更新绑定到某个属性的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

1 个答案:

答案 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