是否可以直接从linq查询结果数据绑定到控件?

时间:2010-10-20 02:36:46

标签: wpf linq

我刚刚开始使用WPF,但是从Linq查询的结果到ListView的数据绑定有问题。

我尝试了许多组合,包括将DataContext和ItemsSource设置为查询。如:

listView.DataContext = (from person in People select person).ToList();

然后在 xaml 中将 DisplayMemberBinding 设置为{Binding Name}或{Binding / Name}等。

除了在此阶段显示查询中的项目列表之外,我不担心任何更新方式。

所以我想我错过了WPF的一些非常基本的知识,但这部分似乎有一个相当陡峭的学习曲线,所以可能在一些示例代码的正确方向上推动会很好。似乎大多数代码涉及大量数据视图的创建或通知数据类型或至少绑定到本地对象而不是直接从查询。

1 个答案:

答案 0 :(得分:2)

尝试改为:

listView.ItemsSource = (from person in People select person).ToList();

[DataContext设置控件及其子控件的绑定上下文。 ItemsSource设置用于生成控件中项目内容的集合。]

你也可以简单地说:

listView.ItemsSource = People;

富勒示例:

MainWindow.xaml:

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ListView x:Name="listView">
            <ListView.View>
                <GridView>
                    <GridViewColumn DisplayMemberBinding="{Binding Name}"/>
                    <GridViewColumn DisplayMemberBinding="{Binding Age}"/>
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>

MainWindow.xaml.cs:

using System.Windows;

namespace WpfApplication2
{
  public partial class MainWindow : Window
  {
    public MainWindow()
    {
      InitializeComponent();

      var people = new[] { new { Name = "John", Age = 40 }, new { Name = "Bill", Age = 50 } };
      listView.ItemsSource = people;
    }
  }
}