C# 获取MVVM中属性的OldValue
当我想要保存属性时,我试图在MVVM中获取属性的旧值。 我想知道selectedItem的初始值,因为我想 1-知道项目是否已更改 2-使用字段updateDate更新表 3-如果价格发生变化,我想更新另一个价格历史记录表 我该怎么做C# 获取MVVM中属性的OldValue,c#,wpf,mvvm,C#,Wpf,Mvvm,当我想要保存属性时,我试图在MVVM中获取属性的旧值。 我想知道selectedItem的初始值,因为我想 1-知道项目是否已更改 2-使用字段updateDate更新表 3-如果价格发生变化,我想更新另一个价格历史记录表 我该怎么做 public class ItemViewModel : ObjectBase { public ObservableCollection<Item> itms = new ObservableCollection<Item>
public class ItemViewModel : ObjectBase
{
public ObservableCollection<Item> itms = new ObservableCollection<Item>();
private ObservableCollection<Item> _prevItems;
private Item selectedItem;
public Item SelectedItem
{
get
{
return this.selectedItem;
}
set
{
this.selectedItem= value;
this.RaisePropertyChanged("SelectedItem");
}
}
#region SaveItem
private void SaveItem(object obj)
{
if (this.items != _prevItems)
{
this.selectedItem.DateUpdated = this.DateUpdated;
this.item.EditAsync(this.selectedItem );
}
else
{
this.item.EditAsync(this.selectedItem );
}
this.LoadData();
}
#endregion
#region Items
private ObservableCollection<Item> items;
public ObservableCollection<Item> Items
{
get { return this.items; }
set
{
this.items = value;
itms = items;
this.RaisePropertyChanged("Items");
}
}
#endregion
#region EditItem
private void EditItem(object obj)
{
itms = items;
_prevItems = itms;
}
#endregion
}
public class ObjectBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
#region RaisePropertyChanged
protected void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
公共类ItemViewModel:ObjectBase
{
公共ObservableCollection itms=新ObservableCollection();
私人可观测收集项目;
私有项目selectedItem;
公共项目选择项
{
得到
{
返回此项。选择编辑项;
}
设置
{
这个。selectedItem=值;
此.RaisePropertyChanged(“SelectedItem”);
}
}
#区域保存项
私有无效保存项(对象obj)
{
如果(this.items!=\u previitems)
{
this.selectedItem.DateUpdated=this.DateUpdated;
this.item.EditAsync(this.selectedItem);
}
其他的
{
this.item.EditAsync(this.selectedItem);
}
这是LoadData();
}
#端区
#区域项目
私人可观测收集项目;
公共可观测收集项目
{
获取{返回this.items;}
设置
{
这个项目=价值;
itms=项目;
本.增加财产变更(“项目”);
}
}
#端区
#区域编辑项
私有无效编辑项(对象对象对象)
{
itms=项目;
_previitems=itms;
}
#端区
}
公共类ObjectBase:INotifyPropertyChanged
{
公共事件属性更改事件处理程序属性更改;
#区域RAISE属性已更改
受保护的void RaisePropertyChanged(字符串propertyName)
{
if(PropertyChanged!=null)
{
PropertyChanged(这是新的PropertyChangedEventArgs(propertyName));
}
}
#端区
}
先谢谢你 如果我理解正确,下面的内容会有所帮助
public ObservableCollection<Item> itms
{
get{ return _itms;}
set
{
if(value != _itms)
{
_prevItems = _itms;
_itms = value;
}
}
公共可观测收集itms
{
获取{return\u itms;}
设置
{
如果(值!=\u itms)
{
_Previitems=_itms;
_itms=价值;
}
}
这将在使用新值更新旧项之前保存旧项,并在其更改之前存储一个副本。您可以将最后一个保留在私有字段
项中
,或者您可以有一个私有列表
。这只是在编程。@EdPlunkett:当我单击“编辑”时,我可以捕获旧项的值集合(请参见编辑项),我更改ietem的名称并单击“保存”,然后我看到_previitems也发生了更改,因为我知道我在编辑项上有一个断点,当我尝试保存新数据时,断点仅通过“保存”停止。我不知道EditItems应该做什么或谁调用它。这是命令执行方法吗?它应该做什么?为什么你有一个itms
集合以及项目
?这些与SelectedValue
有什么关系?为什么你要将\u previitems
设置为itms
的新值?@EdPlunkett:谢谢你的回复。让我解释一下我的场景:我的屏幕包含一个项目列表视图,5列,3列属性,2表示编辑和删除。当我选择一个项目并单击编辑(editItem命令)时,编辑表单显示在列表视图下方。然后我可以更改该项目的名称,例如,然后单击保存(save命令)。确定。editItem与此有关?还记得我说过“存储副本”。存储对同一更改对象的另一个引用将无法获得旧版本。