代码之家  ›  专栏  ›  技术社区  ›  James Hulse

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

  •  2
  • James Hulse  · 技术社区  · 15 年前

    我刚开始使用wpf,在将Linq查询的结果数据绑定到ListView时遇到了问题。

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

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

    然后在 XAML 设置 显示成员绑定 到绑定名称或绑定/名称等。

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

    所以我想我遗漏了一些关于wpf的基本知识,但是这部分的学习曲线相当陡峭,所以也许朝着正确的方向推动一些示例代码是很好的。似乎大多数代码都涉及到大量数据视图的创建或通知数据类型,或者至少绑定到本地对象,而不是直接从查询开始。

    1 回复  |  直到 15 年前
        1
  •  2
  •   lesscode    15 年前

    尝试代替:

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

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

    您也可以简单地:

    listView.ItemsSource = People;
    

    更充分的例子:

    主窗口.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>
    

    主窗口.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;
        }
      }
    }