2013-12-12 1 views
0

Надеюсь, это будет легко. Что-то я забыл.Заполнение списка приложений XAML Store из запроса Linq

Я пытаюсь заполнить combobox в приложении Store из запроса Linq. Это не двусторонние отношения. значения CB будут использоваться для изменения других элементов отображения для целей отчетности - это только чтение.

Linq возвращает iEnumerable список. Я задаю это к .DataContext ЦБ в C#

public MyClass 
{ 
    public string Area; 
} 

this.AreaList.DataContext = QueryData; 
this.AreaList.SelectedIndex = 0; 

Я знаю, что данные были «прикреплены», как я могу программно получить к нему:

MyClass item = (MyClass)this.AreaList.SelectedItem; 
MyOtherClass.Area = item.Area; 

Этот вопрос в том, что ЦБ показывает правильное количество значений в нем, но все они пусты. Я пробовал множество комбинаций XAML, но никто ничего не предлагал на экране.

В настоящее время нерабочего XAML является:

<ComboBox x:Name="AreaList" ItemsSource="{Binding}" DisplayMemberPath="Area" SelectedValuePath="Area" HorizontalAlignment="Left" VerticalAlignment="Top" /> 

Любой помощь, чтобы получить мой атрибут Area отображается в CB был бы оценен.

Приветствия,

Рой

ответ

0

Я рассматриваю QueryDataList<MyClass> является то Area должен быть свойством, а не поле (переменный), если вы хотите связать ComboBox с List<T>. Я бы рекомендовал использовать List<string>, тогда не нужно использовать DisplayMemberPath & SelectedValuePath. Так что вам просто нужно удалить DisplayMemberPath & SelectedValuePath, если вы идете на List<string>, а затем использовать

MyOtherClass.Area = AreaList.SelectedItem.ToString(); 
+0

Как уже упоминалось в первоначальном посте. Это IEnumerable . Я также не вижу, как SelectedItem.ToString() поможет, как я уже сказал, я могу получить доступ к информации при любых обстоятельствах. Я просто не могу заставить combobox отображать значение атрибута .Area в поле со списком. – Corneloues

+0

Почему вы используете 'IEnumerable ', 'MyClass' имеет только одно свойство, которое также является строкой, поэтому вы должны пойти с' IEnumerable ' – Xyroid

+0

Я мог бы, но то, что я не хотел входить, - это весь код что сидит за этим. У меня стандартный шаблон, который возвращает данные в стандартном структурированном виде. В этом случае MyClass имеет один атрибут. Другие запросы Linq возвращаются. MyClass наследует от BaseClass, который позволяет мне вводить тип других моих методов и свойств. – Corneloues

0

Использование

this.AreaList.ItemsSource = QueryData;

вместо

this.AreaList.DataContext = QueryData;

+0

Пробовал, что. .. тот же результат – Corneloues

0

Так что моя проблема заключалась в том, что пользовательский объект заполнял поле со списком. Я пробовал каждую комбинацию атрибутов XAML, пытающихся работать с IEnumerable <>, возвращаемым Linq.

После долгих обсуждений самым простым решением было взять IEnumerable <> и просто извлечь атрибут, который я хотел в List.

Конечным результатом было использование метода .Select().

public List<string> Filter() 
{ 
    var data = from c in this.Source.XDoc.Descendants("R") 
     group c by c.Element("C0").Value into d 
     select new { d.Key }; 

    return data.Select(area => area.Key).ToList(); 
} 

Кажется очевидным сейчас.

Приветствия,

Рой

Смежные вопросы