簡體   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