【发布时间】:2010-12-08 17:38:36
【问题描述】:
我有一个 ViewModel 封装了一些正在选项对话框中编辑的属性。在他们点击 Ok 按钮之前,我实际上无法将它们保存到设置中,这最终会在这个特定的 ViewModel 上调用 Commit。
我的 ViewModel 中的单个属性如下所示:
public bool SomeProperty
{
get
{
return m_SomeProperty;
}
set
{
if (m_SomeProperty != value)
{
m_SomeProperty = value;
NotifyPropertyChanged("SomeProperty");
}
}
}
private bool m_SomeProperty = Properties.Settings.Default.SomeProperty;
所以 Commit 的正常实现是这样做的:
public void Commit()
{
Properties.Settings.Default.SomeProperty = m_SomeProperty;
// Add other properties here...
}
这还不错,但我不喜欢这样的原因是如果你添加一个新属性,你必须在两个地方为它添加代码。我尽量避免这种情况。
起初我以为我可以声明一个名为 OnCommit 的私有事件并让 Commit 方法引发该事件,并让每个属性的代码为该事件添加一个事件处理程序并在那里写入设置,但我没有'不知道如何在构造函数中不添加事件处理程序的情况下做到这一点,这对这种情况没有帮助。
有什么想法吗?有没有人有一种优雅的方式来做我想做的事情?
编辑:感谢六字母变量的回答。我采纳了这个想法并将其纳入SoapBox Core 并将结果开源。查看选项对话框以了解其工作原理。
【问题讨论】:
标签: c# events properties settings