【发布时间】:2018-07-14 19:22:09
【问题描述】:
我有简单的视图模型:
private List<Item> itemsList;
public List<Item> ItemsList
{
get { return itemsList; }
set
{
itemsList= value;
NotifyPropertyChanged();
}
}
private Item selectedItem;
public Item SelectedItem
{
get { return selectedItem; }
set
{
selectedItem = value;
NotifyPropertyChanged();
}
}
// I call this method from button handler
// window code behind: vm.SaveChanges()
// instead of RelayCommand because I'm lazy (I don't need strict MVVM)
public void SaveChanges()
{
context.SaveChanges();
}
我的观点是我有一个 ListView:
<ListView
ItemsSource="{Binding ItemsList}"
SelectedItem="{Binding SelectedItem}"
/>
很少有带有 Item 属性的控件:
<TextBox Text="{Binding SelectedItem.Name}"/>
<TextBox Text="{Binding SelectedItem.Phone}"/>
当我在 ListView 上选择一个项目时 - SelectedItem 字段值出现在 TextBoxes 中,我可以编辑它们并保存它们。一切正常,但我不想让用户在保存更改之前更改所选项目,因为用户不会看到其他项目中的更改。
现在我想禁用 ListView 上的选择更改,当项目有未保存的更改时。
我正在尝试这样的 ViewModel 属性:
public bool NoUnsavedChanges
{
get { return !context.ChangeTracker.HasChanges(); }
private set;
}
并将其绑定到 ListView 的 IsEnabled 属性,但它当然不起作用,因为该属性没有 NotifyPropertyChanged()。
我的问题是:如何在选定项目(或者如果整个上下文中存在未保存的更改)时禁用 ListView 选择更改(或完全禁用它)?
【问题讨论】:
标签: c# wpf mvvm entity-framework-6 mvw