繁体   English   中英

我已经将XML文件反序列化为class.cs,如何在c#ViewModel中使用它

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM