我正在研究WPF项目,我需要将所有对象存储在本地文件系统中的单独xml文档中。但是现在我每次更改我的对象时都会更新我的xml文档。有没有办法将这些对象与c#中的相应xml文档同步?
提前致谢
答案 0 :(得分:0)
您可以编写一个接口并在代码中的每个数据对象上实现它。看看下面的代码。您还必须手动调用同步方法,但我认为这是更干净的代码。
public interface IDataChangeHandler
{
void OnDataChanged(object data, string tag);
}
public class DataObject : IDataChangeHandler
{
private string _property1;
public string Property1
{
get { return _property1; }
set
{
_property1 = value;
OnDataChanged(_property1, "property1");
}
}
private int _property2;
public int Property2
{
get { return _property2; }
set
{
_property2 = value;
OnDataChanged(_property2, "property2");
}
}
public void OnDataChanged(object data, string tag)
{
/*write the changes in xml*/
}
}
答案 1 :(得分:0)
您可以在要在xml中保存的对象的类中实现System.ComponentModel.INotifyPropertyChanged
。请参阅以下示例:
public class Class1ToSave : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private int _property1;
public int Property1
{
get
{
return _property1;
}
set
{
if(_property1 != value)
{
_property1 = value;
OnPropertyChanged("Property1");
}
}
}
private void OnPropertyChanged(string propertyName)
{
if(PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
之后,您可以从客户端代码订阅PropertyChanged事件Class1ToSave
,其中您已编写了将数据保存到xml的代码。
由您决定是在每次更改属性后将数据保存到xml还是仅在适当的列表中记录更改。该列表可以在稍后的适当时间进行批量保存以用于优化问题。
通过这种方式,只要属性值发生更改,侦听器就会选择更新的属性值并将其保存到xml中。