繁体   English   中英

更新绑定到属性的文本框控件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM