C# 获取MVVM中属性的OldValue

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>

当我想要保存属性时,我试图在MVVM中获取属性的旧值。 我想知道selectedItem的初始值,因为我想 1-知道项目是否已更改 2-使用字段updateDate更新表 3-如果价格发生变化,我想更新另一个价格历史记录表

我该怎么做

    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与此有关?还记得我说过“存储副本”。存储对同一更改对象的另一个引用将无法获得旧版本。