数据绑定WPF DataGrid控件到System.Data.DataTable对象?

时间:2009-07-10 20:28:31

标签: c# .net wpf data-binding xaml

要使我的WPF DataGrid控件绑定到DataTable对象,我需要做什么?

我已经忍受了好几天了。即使绑定和查询都正常工作,并且表中有可观察的数据 - 数据网格中也没有显示任何内容。

我的XAML代码类似于:

<Window x:Class="DataGridTest.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:TK="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"
    Title="Window1" Height="300" Width="300">
        <Grid>
            <TK:DataGrid ItemsSource="{Binding Path=DTUsers}" />
        </Grid>
</Window>

我的C#代码隐藏类似于:
(DAO是我的数据访问对象)

public partial class Window1 : Window
{
    public dao DAO = new dao (ConnectionString) ;
    public System.Data.DataTable DTUsers { get; set; }

    public Window1()
    {
        InitializeComponent();

        if (DAO != null)
            DTUsers = DAO.Query( @"SELECT * FROM users" );
            // Returns a DataTable object containing user records.
            // I have confirmed that this returns my data correctly.
    }
}

我检查了输出,没有绑定错误 为什么这会编译运行,但不会显示任何数据???

(如果您不知道DataGrid控件的位置,WPF工具包可用here。安装它,添加对WPFToolkit.dll的引用[将在“Add Reference”对话框中显示“.NET”],并提供XML命名空间声明[在我上面的XAML中]以使用WPF DataGrid控件。)

1 个答案:

答案 0 :(得分:5)

InitializeComponent()将实例化您的标记,包括绑定。此时DTUsers仍为null,因此不会显示任何内容。然后,你改变了DTUsers,但是没有办法让绑定(以及网格)知道你做了 - 所以它什么也没做。

您应该在您的课程中设置DTUsers依赖项属性或实施INotifyPropertyChanged,并在更改属性值后引发PropertyChanged事件。