[英]I have deserialized my XML file into class.cs, how can I use it in c# ViewModel
我要在ViewModel中使用以下XML文件(该XML文件已简化):
<?xml version="1.0" encoding="utf-8"?>
<FloorPlan xmlns="http://www.ioc.org">
<version>1.0</version>
<room type="bathroom">
<width>10</width>
<length>10</length>
<floor>tile</floor>
</room>
<room type="bedroom">
<width>15</width>
<length>20</length>
<furniture>
<bed>
<location></location>
</bed>
<dresser>
<location></location>
</dresser>
</furniture>
</room>
</FloorPlan>
我已使用Visual Studio的xsd.exe工具自动生成类floorplan.cs
我已经使用XmlSerializer.Deserialize将XML文件放入类myFloorplan的实例中
我有一个用户界面,该界面必须显示myFloorpan的复杂可视表示形式,允许用户对其进行更新,并检查业务逻辑以确保用户仅进行有效的更新。 用户完成操作后,将其写到newFloorplan.xml中
如何将UI中的数据绑定到myFloorplan?
在生成的EF类中添加INotifyPropertyChange表示不要在模型上实现INotifyPropertyChanged,而是使用事件。 但是,这两个方法都需要修改floorplan.cs中自动生成的代码,这似乎是个坏主意。
另一个站点建议自动生成的代码不是“ WPF友好”的,一旦我将floorplan.xml读入myFloorplan,我就应该将其转换为可在视图模型中绑定数据的内容,仅在需要时才将其转换回去。写回XML。 但这似乎让我有两个几乎完全相同的独立模型,一个是自动生成的模型,另一个是我可以控制的模型。
任何建议和快速代码段将不胜感激!
考虑到VM负责View和Model之间的数据传输,因此最好刮擦VM以适合您的UI。 FloorPlan和VM可能看起来相同,但是它们代表了软件中不同的体系结构领域。 VM可以对FloorPlan本身无动于衷,因为它仅有助于显示/更新数据。
您仍然可能希望xsd类将数据传递给VM。 可能的直观实现是:
var floor_plan = (FloorPlan)XmlSerializer.Deserialize(source);
ui.DataContext = new ViewModel(floor_plan);
ViewModel.cs
public ViewModel(FloorPlan floorPlan) { _floorPlan = floorPlan; )
public double SomeData {
get { return _floorPlan.SomeData; }
set { _floorPlan.SomeData = value; OnPropertyChanged<double>(() => SomeData); }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.