1
我在ObservableCollection
內構建一個包含ObservableCollection
的對象。反序列化下面的對象可正確地創建CustomTab
項目的集合,但不會創建Task
項目的集合。將XML嵌套列表反序列化爲嵌套ObservableCollection
下面顯示的代碼產生零Task
項目。如果我改變代碼:
[XmlElement("Tasks")] // was "Task" in original code
public ObservableCollectionExtended<UtilitiesTask> TasksCollection
我得到TasksCollection一個項目(應該是取決於哪個CustomTab我讀2種或3個元素)。
我怎樣才能獲得TasksCollection填充Task
項目在各自的Tasks
根下?
備註:爲了便於閱讀,我已將所有屬性簡化爲{ get; set; }
。在代碼中,我有每個人都發送任何更改的通知。
我正在使用SimpleMVVM框架,其中ModelBase<>
來自。
這裏是我的代碼:
CustomTabs.xml
<?xml version="1.0" encoding="utf-8"?>
<CustomTabsConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CustomTab>
<Header>88888</Header>
<TabVisibility>Visible</TabVisibility>
<Tasks>
<Task>
<TaskName>Task 11</TaskName>
</Task>
<Task>
<TaskName>Task 12</TaskName>
</Task>
</Tasks>
</CustomTab>
<CustomTab>
<Header>555</Header>
<TabVisibility>Visible</TabVisibility>
<Tasks>
<Task>
<TaskName>Task 21</TaskName>
</Task>
<Task>
<TaskName>Task 22</TaskName>
</Task>
<Task>
<TaskName>Task 23</TaskName>
</Task>
</Tasks>
</CustomTab>
</CustomTabsConfig>
CustomTabs.xsd
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified">
<xs:element name="CustomTabsConfig" type="CustomTabsConfigType"/>
<xs:complexType name="CustomTabsConfigType">
<xs:sequence>
<xs:element type="CustomTabType" name="CustomTab" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CustomTabType">
<xs:sequence>
<xs:element type="xs:int" name="Header"/>
<xs:element type="xs:string" name="TabVisibility"/>
<xs:element type="TasksType" name="Tasks"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="TasksType">
<xs:sequence>
<xs:element type="TaskType" name="Task" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="TaskType">
<xs:sequence>
<xs:element type="xs:string" name="TaskName"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
CustomTabsConfigModel.cs(編輯爲簡潔起見)
個 CustomTab.cs
[XmlRoot("CustomTab")]
public class CustomTab : ModelBase<CustomTab>
{
public CustomTab()
{
this.Header = "";
this.TabVisibility = Visibility.Visible;
}
[XmlElement("Header")]
public String Header { get; set; }
/// <summary>
/// Sets the Visibility of the tab
/// </summary>
[XmlElement("TabVisibility")]
public Visibility TabVisibility { get; set; }
/// <summary>
/// Collection of Tasks
/// </summary>
[XmlElement("Task")]
public ObservableCollection<UtilitiesTask> TasksCollection { get; set; }
}
[XmlRoot("Task")]
public class UtilitiesTask : ModelBase
{
public UtilitiesTask()
{
this.TaskName = "";
}
[XmlElement("TaskName")]
public String TaskName { get; set; }
}
}
如果它解決,只是回答自己的問題:) – BradleyDotNET 2015-02-10 18:27:48
如果你解決了這個,請將您的解決方案作爲答案發布,並且(現在或之後)接受該答案。 – 2015-02-10 18:28:17
要發佈您的解決方案,請參閱[我可以回答我自己的問題?](http://stackoverflow.com/help/self-answer)並正確執行。 – 2015-02-10 18:30:20