我有一个简单的视图模型:
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}"
/>并且很少有具有项属性的控件:
<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的ListView属性,但当然不能工作,因为该属性没有NotifyPropertyChanged()。
我的问题是:当选定的项(或者如果整个上下文中有未保存的更改)时,如何禁用ListView选择更改(或完全禁用它)?
发布于 2018-07-16 10:08:44
...and将其绑定到ListView的IsEnabled属性,但它当然不能工作,因为该属性没有
NotifyPropertyChanged()。
然后引发一个PropertyChanged事件。视图模型应该实现INotifyPropertyChanged事件,Item类也应该实现。如果没有,您应该用一个包装类替换它。然后,当视图模型的状态发生变化时,您可以为视图模型的PropertyChanged属性引发SelectedItem事件,例如:
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
{
if (selectedItem != null)
selectedIten.PropertyChanged -= OnItemPropertyChanged;
selectedItem = value;
NotifyPropertyChanged();
if (selectedItem != null)
selectedIten.PropertyChanged += OnItemPropertyChanged;
}
}
private void OnItemPropertyChanged(object sender, PropertyChangedEventArgs e)
{
NotifyPropertyChanged("NoUnsavedChanges");
}
public bool NoUnsavedChanges
{
get { return !context.ChangeTracker.HasChanges(); }
}
public void SaveChanges()
{
context.SaveChanges();
NotifyPropertyChanged("NoUnsavedChanges");
}https://stackoverflow.com/questions/51342668
复制相似问题