2011-10-02 45 views
0

我有3个文本框的wpf应用程序。如何在wpf中完成属性和控件更新?

txb1是用于插入文本

txb2显示从插入解析的文本一定值时,它为int数

txb3应显示从TXB2由恒定值

multiplyed值有一类存储数据。

class Data 
{ 
    private conts int Mul = 10; 
    public string Text {get; set;} 
    public int Number {get; set;} 
    private int MultiNumber 
    { 
     get 
     { 
      Number * Mul; 
     } 
    } 

    public string MultiNumberFormated 
    { 
     get 
     { 
      string.Format("{some format}", MultiNumber); 
     } 
    } 
} 

通过单击表格我处理事件,创建Data新实例,通过txb1.Text通过构造函数,并调用内部Data类,它的设定值,以Number解析功能按钮。文本框定义为Text="{Binding SomeProperty}"DataContext容器的文本框设置为Data实例,所以在按钮单击值后在相应的框中出现。

现在,我需要一个解决方案,使txb3更新txb2改变

这是一个复杂应用程序的小例子,带有更多的链接文本框。例如txb4显示乘以MultiNumber,所以我不想使用按钮事件更新的winforms解决方案。有没有这样的方式?我也很感谢为这个特定的应用程序坐的代码示例。

+0

我有一个教程,截图和代码发布为这个问题上的答案:http://stackoverflow.com/questions/7592013/trying-to-understand-of-dependencyproperty/7599716#7599716 - 这包括INotifyPropertyChanged '实施答案正在指向你。 –

回答

1

你有几个选择这里。你将需要实现你的数据对象INotifyPropertyChanged的作为SLaks说 - 有大量的tutorials上 - 那么你可以

  • 让您的数据类的新属性为乘号和绑定txb3到
  • Implement a value converter处理乘法对你来说,如果它的将是只显示

我还要从你的电流值通过从文本框中的按钮处理程序的办法了。

我可能会看你的移动功能MultiNumberFormatted成一个值转换器txb2和数据绑定的一切(包括TXB1这是目前您的入口点的计算和未绑定到什么吗?)到性能上的Data实例在生命周期更快创造的 - 无论是与页面构建或通过在

或者,你可以做MultiNumberFormatted上的数据的性质,并从初始数字的制定者明确设置:

int InputNumber 
{ 
    get 
    { 
     _return _inputNumber; 
    } 
    set 
    { 
     _inputNumber = value; 
     MultiNumberFormatted=String.Format("whatever: {0}", InputNumber); 
     NotifyPropertyChanged("InputNumber"); 
    } 
} 

string MultiNumberFormatted 
{ 
    get 
    { 
     return _multiNumber; 
    } 
    set 
    { 
     _multiNumber=value; 
     NotifyPropertyChanged("MultiNumberFormatted"); 
    } 
} 

那。一种做法还有其他的。关键在于,如果你将所有东西都绑定到合适的属性上,并让WPF绑定基础设施完成它的事情,那么它们都是“实时”的,而且一切都“正常工作”。

1

您需要在模型中执行INotifyPropertyChanged,并在所有从属属性设置器中提升PropertyChanged事件。

+0

你写得很好,但我无法想象如何编写它。 –

2

正如Slaks所说,您必须在您的ViewModel中实现INotifyPropertyChanged
我们指的是MVVM模式,特别关注V(View)和VM(ViewModel)。

你可以找到一个例子here

然后,一旦你证明自己上,你真的想上需要从用户输入文本框的结合使用Mode=TwoWay

然后,在填充其他文本框(依赖于每个参数的那些文本框)的字符串属性的getters中,实现执行计算的逻辑。
在他们的setter中,您将需要引发PropertyChanged事件。

您将很快意识到WPF与此接口以及MVVM模式密切相关。现在

,一旦你做了这一切,我仍然会在那里回答更具体的问题;-)

+0

它不与视图模型的代码紧密结合,只是使用它的公共接口(甚至在那里,只是名称),这与使用普通OOP获得的耦合非常相似。它非常依赖于MVVM模式。 –

+0

我的意思并不是象OOP那样紧密结合,而是我的意思。 –

+0

我尽量不要迂腐。但“紧密结合”现在是一个被加载的术语,具有难以维护和重构的负面内涵。 “强相关”在这里可能更有意义,因为MVVM使得维护和单元测试更加容易,代价是必须从视图中提取视图模型。但是,是的,您的视图模型上的公共界面不会改变,而不会破坏您的视图,从这个意义上说,有一些耦合。它仍然比Winforms更宽松,你的观点和实现一起描述:) –

相关问题