我想,一旦我改變了txtA的值,txtB和txtC就會自動改變,因爲我已經爲ValueA實現了INotifyPropertyChanged。WPF/INotifyPropertyChanged,更改txtA的值,txtB和txtC應該自動更改?
但它們沒有在UI上更新。 txtB始終爲100,txtC始終爲-50。
我不知道是什麼原因。
我的XAML ..
<Window x:Class="WpfApplicationReviewDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<TextBox Name="txtA" Text="{Binding ValueA}" />
<TextBox Name="txtB" Text="{Binding ValueB}" />
<TextBox Name="txtC" Text="{Binding ValueC}" />
</StackPanel>
</Window>
我的代碼背後...
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new Model();
}
}
public class Model : INotifyPropertyChanged
{
private decimal valueA;
public decimal ValueA { get {
return valueA;
}
set
{
valueA = value;
PropertyChanged(this, new PropertyChangedEventArgs("ValueA"));
}
}
private decimal valueB;
public decimal ValueB
{
get
{
valueB = ValueA + 100;
return valueB;
}
set
{
valueB = value;
PropertyChanged(this, new PropertyChangedEventArgs("ValueB"));
}
}
private decimal valueC;
public decimal ValueC
{
get
{
valueC = ValueA - 50;
return valueC;
}
set
{
valueC = value;
PropertyChanged(this, new PropertyChangedEventArgs("ValueC"));
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
後,我到值a屬性的set方法添加代碼,它的工作原理。
public decimal ValueA { get {
return valueA;
}
set
{
valueA = value;
PropertyChanged(this, new PropertyChangedEventArgs("ValueA"));
PropertyChanged(this, new PropertyChangedEventArgs("ValueB"));
PropertyChanged(this, new PropertyChangedEventArgs("ValueC"));
}
}
但我應該自動刷新/更新txtB和txtC。請指教。
我見過很多人說,你的做法,這是一個反模式。他們聲稱您應該實現一種模式,您可以通過屬性等來定義「INotify」依賴關係。例如,定義ValueB依賴於ValueA,而不是讓ValueA必須知道依賴於它的所有內容。就我個人而言,我經常使用你的方法,因爲它非常簡單,這就是爲什麼我投票給你。 – Nogusta
@Nogusta謝謝。而且,我自己實際上並沒有寫任何代碼。如果我正確地閱讀了這個問題,這個問題只是要求解釋爲什麼一種方式比另一種更好。他自己寫了兩個片段。 Model2的 –