在WPF ViewModel中将对象(不是实体,不是框架)标记为脏对象

在WPF ViewModel中将对象(不是实体,不是框架)标记为脏对象,wpf,mvvm,icommand,canexecute,Wpf,Mvvm,Icommand,Canexecute,在我的viewmodel中,有一个可序列化的属性CurrentObject,类型为SomeDomainType 有一个表单可以编辑其属性,其中一个按钮是“提交更改”,数据绑定到ICommandCommitChangesCommand 现在,我希望只有当对象被修改时,该按钮才被激活(通过CanCommitChangesCommand(),与Josh Smith的RelayCommand)正确连接) 再说一遍,我想问的是: “如何将对象标记为脏对象,以便我可以使用私有bool ThatPropert

在我的viewmodel中,有一个可序列化的属性
CurrentObject
,类型为
SomeDomainType

有一个表单可以编辑其属性,其中一个按钮是“提交更改”,数据绑定到ICommand
CommitChangesCommand

现在,我希望只有当对象被修改时,该按钮才被激活(通过
CanCommitChangesCommand()
,与Josh Smith的
RelayCommand
)正确连接)

再说一遍,我想问的是:

“如何将对象标记为脏对象,以便我可以使用
私有bool ThatPropertyIsDirty()
方法来检查某些
CanExecute()
中的脏对象?”

从它的声音来看:

  • IsDirty
    属性添加到
    SomeDomainType
  • IsDirty
    的设置程序中,为
    IsDirty
  • SomeDomainType
    上的所有属性中,您可以更改这些属性以使对象被视为
    脏的
    ,在它们的设置器中,将
    IsDirty
    设置为true
  • 这是假定您的
    SomeDomainType
    实现了
    INotifyPropertyChanged
    接口。如果没有,请围绕确实存在的
    SomeDomainType
    创建一个包装器类,并对该包装器进行上述更改。

  • IsDirty
    属性添加到
    SomeDomainType
  • IsDirty
    的设置程序中,为
    IsDirty
  • SomeDomainType
    上的所有属性中,您可以更改这些属性以使对象被视为
    脏的
    ,在它们的设置器中,将
    IsDirty
    设置为true

  • 这是假定您的
    SomeDomainType
    实现了
    INotifyPropertyChanged
    接口。如果没有,请围绕
    SomeDomainType
    创建一个包装类,并对该包装进行上述更改。

    。您是否会说,在一种典型的情况下,对象会再次被视为“干净”,例如,在它被持久化之后?那么,
    IsDirty
    属性应该是公共的吗?我是处理对象持久化的新手(顺便说一句,我的类型实现了
    [Serializable]
    ,但到目前为止我选择不在其上实现
    INPC
    )。是的,通常在将对象持久化到您使用的任何持久化方法(db、平面文件等)之后,它被认为是干净的,您需要将
    IsDirty
    设置为false。您可能希望使用私有setter将
    IsDirty
    公开为public,因为除了属性本身之外,没有什么需要将其设置为dirty。这似乎没问题。为了记录在案,我想我会将您的提示与本问题中提出的
    StatusEnum
    结合起来(我想最适合交易实体)。没问题,任何适合你的场景的东西,如果你需要在你的课堂上表现出这种水平,那就去做吧。有趣。您是否会说,在一种典型的情况下,对象会再次被视为“干净”,例如,在它被持久化之后?那么,
    IsDirty
    属性应该是公共的吗?我是处理对象持久化的新手(顺便说一句,我的类型实现了
    [Serializable]
    ,但到目前为止我选择不在其上实现
    INPC
    )。是的,通常在将对象持久化到您使用的任何持久化方法(db、平面文件等)之后,它被认为是干净的,您需要将
    IsDirty
    设置为false。您可能希望使用私有setter将
    IsDirty
    公开为public,因为除了属性本身之外,没有什么需要将其设置为dirty。这似乎没问题。为了记录在案,我想我会将您的提示与本问题中提出的
    StatusEnum
    结合起来(我想最适合交易实体)。没问题,任何适合你的场景的东西,如果你需要在你的课堂上表现出这种水平,那就去做吧。