我有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}" />
答案 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));
}
}