2012-07-11 72 views
0

我需要更新绑定到属性的TextBox。按照我已经实现的方式,它工作正常。下面的代码更新绑定到属性的文本框控件

private double foo; 

public double Foo 
{ 
    get { return foo; } 
    set 
    { 
    foo = value; 
    RaisePropertyChanged(() => 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和其他财产被更新对方,所以我不能更新属性直接,因为我坠入无边递归来更新属性美孚在这样的价值。

的问题是如何更新绑定到财产TextBox当我改变属性FOO的价值?

回答

1

我会说你应该更新你的Foo1二传手中的公共成员Foo。这将导致RaisePropertyChanged事件触发Foo

private string foo1 

public string Foo1 
{ 
    get { return foo1; } 
    set 
    { 
    foo1 = value; 
    Foo = 4; 
    RaisePropertyChanged(() => Foo1); 
    } 
} 

你可以称之为RaisePropertyChanged(() => Foo);每当你更新你的私人领域foo,但除非有很好的理由不使用属性Foo,我总是用它在fooset的意图是让该代码在属性值发生更改时运行。在我看来,设置私人领域绕过set代码违反了这个意图。

编辑

在另一方面,如果你只是想打电话RaisePropertyChanged和改变Foo值时Foo1(每个setter方法被调用时不一定)改变,只需添加一个检查,看看如果该值已更改。这将处理您的递归问题。

set 
{ 
    if(foo1 != value) 
    { 
     foo1 = value; 
     Foo = 4; 
     RaisePropertyChanged(() => Foo1); 
    } 
} 
+0

就像我在帖子中说,我不能更新属性直接,因为属性更新另一个属性Foo1和Foo1更新美孚所以,我唯一的选择是更新这两个属性的属性,并以某种方式更新绑定到每个属性的TextBoxes – Michelle 2012-07-11 12:48:23

+0

您是否在'Foo' setter中更新'Foo1'? – 2012-07-11 12:51:32

+0

像你所说的“如果”解决了递归问题。谢谢你的帮助 – Michelle 2012-07-11 13:37:40

相关问题