Заполнение выпадающего списка LINQ в Silverlight (WPF)

#c# #linq #visual-studio-2010 #silverlight-4.0 #combobox

#c# #linq #visual-studio-2010 #silverlight-4.0 #выпадающий список

Вопрос:

Я пытаюсь загрузить XML-файл в объект с помощью LinQ в Silverlight с помощью WPF, но я не могу заполнить или привязать свой выпадающий список.

Код объекта является:

     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.Resu< // 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;
  

Конечно, вставленный код не содержит ошибок, но не работает.
Выбор языка — это моя комбинация. В linq нет проблем, проблема в том, что я привязываю выпадающий список 🙂

Чего я действительно хочу, так это попробовать сделать что-то вроде: MyComboBox.Источник данных = MyClass.name ; для каждого элемента.

заранее спасибо! 🙂

Ответ №1:

Я бы посоветовал вам попробовать преобразовать ваш LINQ в список и проверить окно вывода VS на наличие ошибок привязки.

     string XmlString = e.Resu<

    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;
  

Извините, что убрал ваши подчеркивания. 🙂

Комментарии:

1. спасибо за исправленный код! И что произойдет, если я захочу, чтобы экземпляр «Language_Index» был заполнен выбором linq, а затем попытаюсь загрузить выпадающий список (languageselector) с этим экземпляром language_index ? 🙂

2. Извините, я пробовал код, но он не работает. Может быть, мне нужно что-то указать в XAML? Спасибо

3. Очевидно, вам нужно указать ItemTemplate, чтобы отобразить эти вещи там. например. <Выпадающий список><Выпадающий список. ItemTemplate><DataTemplate><StackPanel><TextBlock Text={Имя привязки}/><TextBlock Text={Статус привязки }/><TextBlock Text={Префикс привязки}/></StackPanel></DataTemplate></ComboBox. ItemTemplate></Выпадающий список>

4. Не беспокойтесь. Я рекомендую WPF, выпущенный Адамом Натаном — очень сильная основа для обучения WPF и полезная также для Silverlight.