从Linq查询填充XAML Store App组合框

时间:2013-12-12 19:20:15

标签: c# linq xaml combobox windows-store-apps

希望这将是一个简单的。我忽略了一些东西。

我正在尝试从Linq查询中填充Store App中的组合框。这不是双向关系。为了报告目的,CB的值将用于更改其他显示元素 - 它是只读的。

Linq返回一个iEnumerable列表。我将此分配给C#

中CB的.DataContext
public MyClass
{
    public string Area;
}

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

我知道数据已被“附加”,因为我可以通过编程方式获取它:

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

这个问题是CB显示了正确的值数,但它们都是空白的。我尝试了很多XAML组合,但没有提供屏幕上的任何内容。

当前的非工作XAML是:

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

非常感谢任何帮助我在CB中显示我的Area属性。

干杯,

罗伊

3 个答案:

答案 0 :(得分:0)

我正在考虑QueryDataList<MyClass>,如果您想将AreaComboBox绑定,List<T>应该是属性而不是字段(变量)。我建议您使用List<string>,然后无需使用DisplayMemberPath&amp; SelectedValuePath。所以你只需删除DisplayMemberPath&amp; SelectedValuePath如果您选择List<string>然后使用

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

答案 1 :(得分:0)

使用

this.AreaList.ItemsSource = QueryData;

而不是

this.AreaList.DataContext = QueryData;

答案 2 :(得分:0)

所以我的问题是让自定义对象填充组合框。我尝试使用XAML属性的每个组合来尝试使用IEnumerable&lt;&gt;由Linq回来。

经过深思熟虑,最简单的解决方案是采用IEnumerable&lt;&gt;并简单地将我想要的属性提取到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();
}

现在看来很明显。

干杯,

罗伊