我有以下結構的XML文件:WPF,XML數據綁定到依賴/級聯組合框
<Products>
<Product name="MyProduct1">
<Components>
<Component name="MyComponent1">
<SubComponents>
<SubComponent name="MySubComponent1"/>
<SubComponent name="MySubComponent2"/>
...more SubComponent nodes...
</SubComponents>
</Component>
...more Component nodes...
</Components>
</Product>
...more Product nodes...
</Products>
我試圖創建一個具有與它的產品名稱組合框一個WPF應用程序。我對WPF完全陌生,所以我不知道我是否以正確的方式處理事情。選擇產品時,應該使用該產品的所有組件填充第二個組合框。當選擇一個組件時,第三個組合框應該填充該組件的所有子組件。
我不知道如何設置組合框之間的依賴關係,除了在由獨立組合框觸發的事件處理程序中填充依賴組合框之外。這似乎意味着我需要能夠讀取C#中的XML,所以我有[Serializable]
類Products
,,Component
和SubComponent
。不過,我試圖做XML數據綁定在我的XAML:
<Window.Resources>
<XmlDataProvider Source="Products.xml"
XPath="Products/Product"
x:Key="productsXml"/>
</Window.Resources>
我目前不在我的第一個組合框看到產品名稱的列表,其XAML如下:
<ComboBox Height="23" HorizontalAlignment="Left" Margin="138,116,0,0"
Name="cbo_product" VerticalAlignment="Top" Width="120"
ItemsSource="{Binding Source=productsXml, [email protected]}"
SelectionChanged="product_SelectionChanged"/>
的產品XML應該是隻讀的 - 用戶將無法從應用程序更改XML中的任何值。我只想讀取XML數據並將其顯示在應用程序中。
我有幾個問題:
- 我要對這個正確?擁有一個獨立的XML文件,我的WPF應用程序可以讀取這些文件,其中包含表示XML文件中節點的類,用於從C#中的這些節點提取數據,使用事件處理程序編寫ComboBox之間的依賴關係等。
- 我的產品名稱(例如MyProduct1)是否顯示在我的ComboBox中?目前它只顯示爲空。
- 看起來好像有
[Serializable]
類代表我的XML節點是多餘/不必要的,因爲XAML已經有了XmlDataProvider
/XPath的東西。是這樣嗎?
編輯:
更新我的組合框的XAML以下,現在我看到在ComboBox我的產品名稱的列表,這要歸功於decyclone's answer:
<ComboBox Height="23" HorizontalAlignment="Left" Margin="138,116,0,0"
Name="cbo_product" VerticalAlignment="Top" Width="120"
ItemsSource="{Binding Source={StaticResource productsXml}}"
DisplayMemberPath="@name"
SelectionChanged="product_SelectionChanged"/>
這裏是如何做到這一點的好例子。 http://msdn.microsoft.com/en-us/library/system.windows.data.xmldataprovider.aspx – decyclone 2010-08-02 14:43:40
這回答了我的問題2)。 :) 謝謝! – 2010-08-02 15:00:13