在WPF ViewModel中将对象(不是实体,不是框架)标记为脏对象
在我的viewmodel中,有一个可序列化的属性在WPF ViewModel中将对象(不是实体,不是框架)标记为脏对象,wpf,mvvm,icommand,canexecute,Wpf,Mvvm,Icommand,Canexecute,在我的viewmodel中,有一个可序列化的属性CurrentObject,类型为SomeDomainType 有一个表单可以编辑其属性,其中一个按钮是“提交更改”,数据绑定到ICommandCommitChangesCommand 现在,我希望只有当对象被修改时,该按钮才被激活(通过CanCommitChangesCommand(),与Josh Smith的RelayCommand)正确连接) 再说一遍,我想问的是: “如何将对象标记为脏对象,以便我可以使用私有bool ThatPropert
CurrentObject
,类型为SomeDomainType
有一个表单可以编辑其属性,其中一个按钮是“提交更改”,数据绑定到ICommandCommitChangesCommand
现在,我希望只有当对象被修改时,该按钮才被激活(通过CanCommitChangesCommand()
,与Josh Smith的RelayCommand
)正确连接)
再说一遍,我想问的是:
“如何将对象标记为脏对象,以便我可以使用私有bool ThatPropertyIsDirty()
方法来检查某些CanExecute()
中的脏对象?”
从它的声音来看:
IsDirty
属性添加到SomeDomainType
IsDirty
的设置程序中,为IsDirty
SomeDomainType
上的所有属性中,您可以更改这些属性以使对象被视为脏的
,在它们的设置器中,将IsDirty
设置为trueSomeDomainType
实现了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
结合起来(我想最适合交易实体)。没问题,任何适合你的场景的东西,如果你需要在你的课堂上表现出这种水平,那就去做吧。