[英]INotifyPropertyChanged, event always null
嗨:)我正在嘗試弄清楚INotifyPropertyChanged如何與一個非常基本的應用程序一起工作。 我只是在mainWindow中有一個按鈕,當您按下它時,它應該觸發一個事件來更新已綁定到特定屬性的textBox。 但是,即使觸發了事件,事件也始終為null,因此不會更新textBox。
<Window x:Class="StockViewer.MainWindow"
<!--Just erased some basic xaml here-->
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<local:RandomGen/>
</Window.DataContext>
<Grid>
<Button Click="incr" Height="30" VerticalAlignment="Top" Background="DarkGoldenrod"></Button>
<TextBlock VerticalAlignment="Top" Margin="40" Text="{Binding price, UpdateSourceTrigger=PropertyChanged}" Background="Aqua"></TextBlock>
</Grid>
按下按鈕后,價格應會發生變化:
public partial class MainWindow : Window
{
private RandomGen gen;
public MainWindow()
{
gen = new RandomGen();
InitializeComponent();
}
private void incr(object sender, RoutedEventArgs e)
{
gen.price = 7;
}
}
class RandomGen : NotifiedImp
{
public RandomGen()
{
_i = 3;
}
private int _i;
public int price
{
get { return _i; }
set
{
_i = value;
OnPropertyChanged("price");
}
}
}
class NotifiedImp: INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this,new PropertyChangedEventArgs(propertyName));
}
}
}
真的很奇怪,處理程序始終為null。 謝謝 :)
您有兩個RandomGen
實例,其中一個在您的XAML中初始化:
<Window.DataContext>
<local:RandomGen/>
</Window.DataContext>
另一個在您的MainWindow
構造函數中初始化:
gen = new RandomGen();
這意味着當您更新gen.price = 7;
您沒有更新DataContext
實例。
一種解決方案是刪除XAML中的<Window.DataContext>
設置,並在MainWindow
構造函數中設置DataContext
,如下所示:
public MainWindow()
{
gen = new RandomGen();
InitializeComponent();
DataContext = gen;
}
最類似於MVVM的解決方案是在RandomGen
對象上使用ICommand
更新price
而不是使用事件處理程序,然后在XAML中使用此命令,例如:
<Button Command="{Binding IncrementPriceCommand}"></Button>
然后由您決定如何初始化DataContext
,而無需以任何方式保留RandomGen
支持字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.