2014-01-08 64 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)); 
    } 
}