2011-11-09 1 views
0

WPF를 사용하여 Silverlight에서 LinQ로 개체에 XML을로드하려고 시도했지만 사용자가 콤보 상자를 채우거나 바인딩 할 수 없습니다.Silverlight (WPF)에서 LINQ로 ComboBox 채우기

개체의 코드는 다음과 같습니다

public class Language_Index 
{ 
    public string Prefix { get; set; } 
    public string Status { get; set; } 
    public string Name { get; set; } 
} 

내 XML은 다음과 같습니다

<languages_index> 
<item prefix="VBNET" name="Visual Basic .NET" status="enabled" /> 
<item prefix="CS" name="C#" status="disabled" /> 

과 코드로드와 현재의 데이터는 다음과 같습니다

  string XmlString = e.Result; // Got all your XML data in to a string 

     XDocument elem = XDocument.Load(XmlReader.Create(new StringReader(XmlString))); 

     var feed_language_index = from nod in elem.Descendants("languages_index") 
            select new Language_Index 
            { 
             Name = nod.Element("item").Attribute("name").Value, 
             Status = nod.Element("item").Attribute("status").Value, 
             Prefix = nod.Element("item").Attribute("prefix").Value 

            }; 

     LanguageSelector.ItemsSource = feed_language_index; 

물론 붙여 넣은 코드 h 오류없이,하지만 작동하지 않습니다. LanguageSelector의 내 콤보입니다. linq 문제가 없다. 문제는 콤보 박스를 바인딩 할 때이다.

나는 정말로 다음과 같이하려고 시도한다. MyComboBox.DataSource = MyClass.name; 모든 요소에 대해

미리 감사드립니다. :)

답변

1

LINQ를 목록으로 변환하고 VS 출력 창에서 바인딩 오류를 확인하는 것이 좋습니다.

string XmlString = e.Result; 

    XDocument elem = XDocument.Load(XmlReader.Create(new StringReader(XmlString))); 

    var feedLanguages = 
      (from nod in elem.Descendants("languages_index") 
      select new Language_Index 
      { 
        Name = nod.Element("item").Attribute("name").Value, 
        Status = nod.Element("item").Attribute("status").Value, 
        Prefix = nod.Element("item").Attribute("prefix").Value 
      }).ToList(); 

    LanguageSelector.ItemsSource = feedLanguages; 

밑줄을 제거해 죄송합니다. :)

+0

수정 된 코드를 보내 주셔서 감사합니다! 그리고 내가 linq 선택으로 채워진 "Language_Index"의 인스턴스를 원한다면 어떻게됩니까? 그리고 language_index의 해당 인스턴스로 콤보 박스 (languageselector)를로드하려고합니까? :) –

+0

미안하지만, 코드를 시도했지만 작동하지 않습니다. 아마 XAML에서 뭔가를 지정해야합니까? thanks –

+1

이런 것들을 표시하려면 ItemTemplate을 지정해야합니다. 예.