2012-02-03 2 views
1

나는 결합하고 XML 파일의 이름 요소를 표시하는 목록 상자가 있습니다. 목록 상자 항목을 선택하면이 항목과 관련된 가격 값을 텍스트 블록에 표시하려고합니다. 프로그래밍 방식으로 가격을 검색하려면 어떻게해야합니까? (xaml 파일이 아니라 코드 뒤에 있음)? 감사.데이터 뒤에 코드에 대 XAML에서 접근 바인딩 - Linq를 XML로?

XML 파일이 노드가 :

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

가 나는 익명 형식으로 select을 Linq를 사용하고 않습니다. 프로그래밍 방식으로 필드에 액세스하는 가장 쉬운 방법은 명명 된 형식을 사용하는 것입니다. 여기

내가 (포함 된 각 목록 상자 항목에 대한 데이터 템플릿 사용) 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를 사용하거나 XMLNode를 수동으로 가져 옵니까? 코드를 보여줄 수 있습니까? – SvenG

+0

@SvenG는 그냥 XAML에서 수행되는 이름의 바인딩을 추가했습니다. Linq를 사용하여 xml 파일을 읽었으므로 XMLDataProvider를 직접 사용하지 않습니다. – user776676

+0

해당 TextBlock 주위에 ViewModel 및 XAML을 표시 할 수 있습니까? –

답변

3

우선 XIN (also in Bindings)을 통한 선택을 포함하여 XmlDocuments으로 많은 작업을 수행 할 수 있으므로 LINQ가 필요하지 않습니다.

당신은 당신은 세 번째라는 이름없이 할 수 있습니다 각각의 특성

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

을 가진 클래스가 필요

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

이있는 경우 둘째라는 이름의 종류에 익명 형식을 변환

는 간단하다 유형은 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

+0

@ user776676 : 우, 포인트. 천만에요 :) –

0

당신은 SelectionChangedEventArgs 매개 변수에서 선택한 항목을 검색 할 수 있어야한다. 즉

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

선택한 항목과 연관된 가격 요소를 검색하려고합니다. 선택한 항목이 아닙니다. – user776676

+0

@ user776676 : 요소에서 자식 XML 노드를 가져올 수 없습니까? –

+0

방금 ​​질문에 대한 정보를 추가했습니다. 감사. – user776676

0

이 게시물을 참조 - bind textblock to current listbox item in pure xaml, 둘 다 XAML과 코드 숨김 XmlDataProvider을 사용하여 이름을 얻을 수 있습니다.

+0

그 코드는 내가 볼 수있는 한 xaml만을 사용합니다. 가격으로 코드에 액세스하고 싶기 때문에 코드를 사용하여 계산할 수 있습니다. – user776676

관련 문제