2013-12-12 10 views
0

希望这将是一个简单的方法。我忽略了一些东西。从Linq Query填充XAML Store App组合框

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

Linq返回一个iEnumerable列表。我在C#中分配这可换股债券的.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显示我的区域属性,将不胜感激。

干杯,

罗伊

回答

0

我正在考虑QueryDataList<MyClass>然后Area应该是一个属性,而不是字段(变量),如果你要绑定ComboBoxList<T>。我会建议使用List<string>,那么不需要使用DisplayMemberPath & SelectedValuePath。所以,你只需要删除DisplayMemberPath & SelectedValuePath如果你去List<string>然后用

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

正如原帖子中提到的。它是一个IEnumerable 。我也没有看到SelectedItem.ToString()会如何帮助,因为我已经说过我可以在任何情况下访问信息。我只是无法让组合框在组合框内显示.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属性的组合,试图与Linq返回的IEnumerable工作在一起。

经过深思熟虑后,最简单的解决方案是采取IEnumerable <>并简单地将我想要的属性提取到列表。

最终结果是使用.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(); 
} 

现在看起来很明显。

干杯,

罗伊