2014-01-08 63 views
0

我有MainWindow和用户控件DataDetails。这两个观点都是视角模型。Wpf用户控件没有显示UI中的更改值

我使用DataDisplay用户控件在MainWindow列表框中显示当前选定的项目。在场景后面,一切正常,调试DataDetailsViewModel中的数据已经正确更改,但我无法强制用户界面来表示此更改的数据。

下面是一些代码

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}" /> 

回答

3

你的ViewModels需要实现INotifyPropertyChanged接口。

此接口包含一个事件,当WPF设置数据绑定时,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)); 
    } 
}