You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WPF ListView中绑定并显示从API获取的SQL数据列表?

WPF ListView数据绑定失败的修复方案

问题分析

你的代码存在以下关键问题导致绑定失效:

  • XAML中存在拼写错误;
  • 未设置DataContext,ListView无法找到绑定源;
  • 使用List<T>无法通知UI数据更新;
  • 数据变量是局部变量,无法被绑定访问;
  • 未实现属性变更通知接口。

修复步骤及代码修改

1. 修复XAML拼写错误

将<GridViewColumno>修正为<GridViewColumn>,并确保ItemsSource绑定到正确的属性名:

<ListView HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch"
          MinWidth="80" MinHeight="25" ItemsSource="{Binding InformationList}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Code" DisplayMemberBinding="{Binding Code}" Width="100"/>
            <GridViewColumn Header="Event" DisplayMemberBinding="{Binding Event}" Width="100"/>
            <GridViewColumn Header="DateEntry" DisplayMemberBinding="{Binding DateEntry}" Width="100"/>
            <GridViewColumn Header="Date Exit" DisplayMemberBinding="{Binding DateExit}" Width="100"/>
            <GridViewColumn Header="Door Entry" DisplayMemberBinding="{Binding DoorEntry}" Width="100"/>
            <GridViewColumn Header="Door Exit" DisplayMemberBinding="{Binding DoorExit}" Width="100"/>
        </GridView>
    </ListView.View>
</ListView>

2. 修改C#代码,实现绑定要求

  • 让窗口类实现INotifyPropertyChanged接口,用于属性变更通知;
  • 将List<T>替换为ObservableCollection<T>,确保数据更新时UI自动刷新;
  • 将局部变量改为公共属性,并在获取数据后更新该属性;
  • 设置窗口的DataContext为自身,让ListView能找到绑定源。

修改后的C#代码:

using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using Newtonsoft.Json;
using RestSharp;

public partial class MainWindow : Window, INotifyPropertyChanged
{
    private ObservableCollection<Information> _informationList;
    public ObservableCollection<Information> InformationList
    {
        get => _informationList;
        set
        {
            _informationList = value;
            OnPropertyChanged();
        }
    }

    public MainWindow()
    {
        InitializeComponent();
        DataContext = this;
        InformationList = new ObservableCollection<Information>();
    }

    public void GetTable_Click(object sender, RoutedEventArgs e)
    {
        var client = new RestClient("http://your-api-address-and-port");
        var request = new RestRequest("GetAccesos", Method.Get);
        var response = client.Execute(request);

        if (response.StatusCode == System.Net.HttpStatusCode.OK)
        {
            var dataList = JsonConvert.DeserializeObject<List<Information>>(response.Content);
            // 清空原有数据并添加新数据,或直接替换集合
            InformationList.Clear();
            foreach (var item in dataList)
            {
                InformationList.Add(item);
            }
            // 也可直接替换:InformationList = new ObservableCollection<Information>(dataList);
        }
    }

    public class Information
    {
        public string Code { get; set; }
        public string Event { get; set; }
        public DateTime? DateEntry { get; set; }
        public DateTime? DateExit { get; set; }
        public string DoorEntry { get; set; }
        public string DoorExit { get; set; }
    }

    // INotifyPropertyChanged接口实现
    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

关键说明

  • ObservableCollection<T>:相比List<T>,它会在集合添加、删除、修改元素时自动通知UI刷新;
  • INotifyPropertyChanged:当InformationList属性整体替换时,通过OnPropertyChanged()通知UI更新绑定;
  • DataContext = this:告诉ListView,绑定的数据来源是当前窗口实例;
  • 若需保留原有绑定上下文,可使用Clear()+Add()更新数据,也可直接替换集合并触发属性变更通知。

内容的提问来源于stack exchange,提问作者user20370754

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 14:50:46