如何在 WPF 中显示表格

Emm*_*et 3 c# wpf datatable xaml

我需要帮助来完成我在 Visual Studio 中做的一个简单项目,只是为了学习一点编码。我想显示一个表,其中包含 WPF 中名为 Car 的类的对象,并且该表应该以编程方式完成。

因此,我在 MainWindow.xaml 中添加了一个 ListView 并将 GridView 的名称设置为 GridView1

<Window x:Class="Test.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 HorizontalAlignment="Center" Height="100" Margin="0,10,0,0" VerticalAlignment="Top" Width="100">
            <ListView.View>
                <GridView x:Name="GridView1">
                    <GridViewColumn/>
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

在 MainWindow.xaml.cs 中我这样做了

using System;
...
//Add this to use DataTable
using System.Data;

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

            //create some objects
            Car ferrari = new Car("Ferrari","Front-Wheel");
            Car mercedes = new Car("Mercedes","Rear-Wheel");

            //create a DataTable
            DataTable dt = new DataTable();
            //add 2 columns
            dt.Columns.Add("Vehicle Name");
            dt.Columns.Add("Vehicle Drive");
            //add 2 rows
            dt.Rows.Add(ferrari.Name, ferrari.Drive);
            dt.Rows.Add(mercedes.Name, mercedes.Drive);
            //bind it to GridView
            GridView1.DataSource = dt;
            GridView1.DataBind();          
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是最后两行,Visual Studio 说它不包含“DataSource”和“DataBind”的定义或扩展方法,但我在网上看到的所有示例都使用它们。错误在哪里?

cvr*_*man 6

更改 xaml,使其看起来像这样:

    <ListView HorizontalAlignment="Center" Height="100" Margin="0,10,0,0" 
              VerticalAlignment="Top" Width="250" ItemsSource="{Binding dt}">
        <ListView.View>
            <GridView x:Name="GridView1">
                <GridViewColumn DisplayMemberBinding= "{Binding Path=Name}" 
                                Header="Vehicle Name" Width="100"/>
                <GridViewColumn DisplayMemberBinding= "{Binding Path=Drive}" 
                                Header="Vehicle Drive" Width="100"/>
            </GridView>
        </ListView.View>
    </ListView>
Run Code Online (Sandbox Code Playgroud)

更改后面的代码:

using System.Windows;
using System.Windows.Controls;
namespace SOWPF
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            var carViewModel = new CarViewModel();
            carViewModel.LoadCars();
            this.DataContext = carViewModel;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

添加视图模型,您使用的是 ObservableCollection,而不是数据表。

using System.Collections.ObjectModel;
using System.Data;
namespace SOWPF
{
    public class CarViewModel
    {
        public ObservableCollection<Car> dt { get; set; }
        public void LoadCars()
        {
            dt = new ObservableCollection<Car>();
            Car ferrari = new Car("Ferrari", "Front-Wheel");
            Car mercedes = new Car("Mercedes", "Rear-Wheel");
            dt.Add(ferrari);
            dt.Add(mercedes);
        }

    }

    public class Car
    {
        public Car(string name, string drive)
        {
            Name = name;
            Drive = drive;
        }
        public string Name { get; set; }
        public string Drive { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)