2012-02-03 29 views
1

我有一個列表框綁定到並顯示來自XML文件的名稱元素。選擇列表框項目時,我想在文本框中顯示與此項目關聯的價格值。如何以編程方式檢索價格(不是在xaml文件中,而是在代碼後面)?謝謝。xaml中的數據綁定訪問vs代碼隱藏 - Linq to XML?

XML文件有這些節點:

<Product> 
    <Name>Book</Name> 
    <Price>7</Price> 
</Product> 

我使用LINQ和做select匿名類型。如果以編程方式訪問該字段的最簡單方法是通過指定類型,請告訴我如何。

這是我在XAML中如何綁定(使用包含每個列表框項的數據模板):

<TextBlock Text = "{Binding Name}" /> 

下面的代碼隱藏功能,我想取回價格:

 private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     // how do I get the value of Price of the selected item here? 
    } 

請注意,我想訪問價格在這個功能,而不是在XAML!

+0

這取決於你如何綁定。您是通過XMLDataProvider還是手動檢索XMLNodes?你能顯示你的代碼嗎? – SvenG 2012-02-03 08:05:09

+0

@SvenG我剛剛在xaml中添加了Name的綁定。我使用Linq來讀取XML文件,所以我不直接使用任何XMLDataProvider。 – user776676 2012-02-03 09:04:05

+0

您可以在TextBlock附近顯示ViewModel和XAML嗎? – 2012-02-06 17:06:32

回答

3

首先您可能不需要LINQ,因爲您可以使用XmlDocuments做很多事情,包括通過XPath進行選擇(also in Bindings)。

其次轉換匿名類型來命名類型是微不足道的,如果你有

select new { Name = ..., Price = ... } 

你只需要一個類與各自的特性

select new Product { Name = ..., Price = ... } 
public class Product 
{ 
    public string Name { get; set; } 
    public string Price { get; set; } // Datatype is up to you... 
} 

第三,你能湊合沒有命名類型使用dynamic

private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    var listBox = (ListBox)sender; 
    // Named type: 
    Product item = (Product)listBox.SelectedItem; 
    // Anonymous type: 
    dynamic item = listBox.SelectedItem; 
    // <Do something with item.Price, may need to cast it when using dynamic> 
    // e.g. MessageBox.Show((string)item.Price); 
} 
+0

你是絕對的輝煌。非常感謝!我需要等15個小時才能獲得點擊「獎金」。 – user776676 2012-02-07 01:55:26

+0

@ user776676:嗚,分。別客氣 :) – 2012-02-07 17:28:39

0

您應該能夠從SelectionChangedEventArgs參數中檢索所選項目。即

var item = e.AddedItems.First(); 
+0

我想檢索與選定項目相關的價格元素。不是所選的項目。 – user776676 2012-02-03 07:40:43

+0

@ user776676:所以你不能從一個元素獲得一個子XML節點或什麼? – 2012-02-03 13:39:38

+0

我剛剛添加了關於我想要做的事情的信息。謝謝。 – user776676 2012-02-03 16:54:13

0

參考這篇文章 - bind textblock to current listbox item in pure xaml,你既可以在XAML和代碼隱藏使用XmlDataProvider得到名字。

+0

盡我所見,該代碼只使用xaml。我想在後面的代碼中訪問價格,所以我可以用它做一些計算。 – user776676 2012-02-03 09:05:44