我認爲你必須做錯你沒有在你的帖子中提到的東西。以下代碼按預期工作,並將MyTestPropertyName打印到控制檯窗口。
public partial class MainWindow : Window
{
public MainWindow()
{
DataContext = new MyViewModel();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
MyViewModel viewModel = DataContext as MyViewModel;
viewModel.PropertyChanged += MyPropertyChangedEventHandler;
viewModel.NotifyPropertyChanged();
}
private void MyPropertyChangedEventHandler(object sender, PropertyChangedEventArgs e)
{
Console.WriteLine(e.PropertyName);
}
}
public class MyViewModel : INotifyPropertyChanged
{
public void NotifyPropertyChanged()
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs("MyTestPropertyName"));
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
應當指出的是,這是很可怕的設計,而僅作爲一個概念證明,你的確可以訂閱事件的視圖模型的代碼隱藏。
謝謝Takkara,我明白爲什麼這是可怕的設計,但我不確定如何改進它。我在3D球體上有標記,當用戶選擇一個標記時,我用一條線加入它們。我在後面的視圖代碼中進行行計算,並且我的視圖模型知道選擇的點何時發生了更改,因此問題。 –
當您使用以下方式觸發更改時,它將起作用:viewModel.NotifyPropertyChanged();但如果更改是通過UI觸發的,它似乎不起作用。用戶界面中的按鈕單擊會觸發虛擬機本身的更改通知,但該更改從不反映在viewModel.PropertyChanged + = MyPropertyChangedEventHandler; –
這是正確的答案。注意到這是一個糟糕的設計實踐。 –