Wpf用户控件未在ui中显示更改的值

时间:2014-01-08 13:50:39

标签: .net wpf

我有MainWindow和用户控件DataDetails。两种观点都有它的视图模型。

我使用DataDisplay用户控件在MainWindow列表框中显示当前选定的项目。在场景后面一切都按预期工作,在DataDetailsViewModel内部调试数据已正确更改,但我无法强制ui表示此更改的数据。

这里有一些代码

DataDetailsViewModel.cs

public string Title { get; set; }
public string Edition {get; set;}

 private void SetSelectedBook_Mediator(object args)
 {
     Book b = (Book)args;
     SelectedBook = b;
     SetData();
 }

 private void SetData()
 {
   // on debugging Title and Edition are properly populated  
     Title = SelectedBook.Title; 
     Edition = SelectedBook.Edition;
 }

DataDetails.xaml

<TextBox Name="txtTitle" Text="{Binding Title}" />
<TextBox Name="txtEdition" Text="{Binding Edition}" />

1 个答案:

答案 0 :(得分:3)

您的viewmodel需要实现INotifyPropertyChanged接口。

此接口包含一个事件,当WPF设置数据绑定时,UI将自动订阅该事件。当属性发生变化时,应该引发事件以通知任何感兴趣的人(您的UI)需要更新它。

有关详细信息,请参阅the MSDN page

public class DataDetailsViewModel : INotifyPropertyChanged {
    private string _title;
    public string Title {
        get { return _title; }
        set { _title = value; NotifyPropertyChanged("Title"); }
    }

    // Other properties, methods, etc...

    public PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(string name) {
        var handlers = PropertyChanged;
        if (handlers != null)
            handlers(this, new PropertyChangedEventArgs(name));
    }
}