2013-10-10 27 views
1

在我的视图模型中,有一个属性CurrentObject 这是可序列化的。在WPF中标记对象(不是实体,不是框架)脏视图模型

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

现在我希望只有在对象被修改后,这个按钮才能被激活(通过CanCommitChangesCommand(),正确连接Josh Smith的RelayCommand),即对象是“脏的”。

再这么说了,我要问的是:

“?我怎么可以标记一个对象作为脏,这样我可以有一个private bool ThatPropertyIsDirty()方法来检查,一些CanExecute()内”

回答

1

从它的声音:

  1. 添加IsDirty财产到您的SomeDomainType
  2. IsDirty二传手提高NotifyPropertyChanged事件IsDirty
  3. 在所有性能上的SomeDomainType你改变,以使对象被认为是Dirty,在他们的setter中,将IsDirty设置为true

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

+0

有趣。你会说有一种典型的情况,即对象被认为是“干净”的,例如,在它被持续之后? IsDirty属性应该公开吗?我在处理对象持久化方面非常初学(顺便说一下,我的类型实现了'[Serializable]',但是我选择了迄今为止不对它实现'INPC')。 – heltonbiker

+0

是的,通常在你的对象被持久化到你正在使用的任何持久化方法(db,平面文件等)之后,它被认为是干净的,并且你希望将IsDirty设置为false。 您可能希望将“IsDirty”公开为私有setter,因为除了属性本身之外,无需将其设置为dirty。 – Psytronic

+0

这似乎没问题。只是为了记录,我想我会结合你的提示与这个问题中提出的'StatusEnum'(我猜是最适合交易实体)。 http://stackoverflow.com/questions/805505/c-sharp-marking-class-property-as-dirty – heltonbiker