【问题标题】:MVVM gridview binding to datatable WPFMVVM gridview 绑定到数据表 WPF
【发布时间】:2011-09-26 03:51:25
【问题描述】:

我是 MVVM 和数据绑定的新手,我在将 gridview 动态绑定到数据表时遇到了一些麻烦。我能够绑定列标题,但网格本身中没有显示任何数据。

我的模型只是返回一个数据表作为传递给它的 SQL 字符串的结果。 我的视图模型只是包装数据表并绑定到视图。

现在我只是尝试通过从主窗口填充 gridview 来显示数据,但只显示标题。

我知道 model.Results 数据表中有数据。

我的视图模型:

public class ResultsViewModel
{
    private DataTable _dt;

    public ResultsViewModel()
    {
        DataSource _ds = new DataSource();

        _dt = _ds.Execute("select * from tbl_users");
    }

    public DataTable Results
    {
        get { return _dt; }
        set { _dt = value; }
    }
}

我从主窗口填充网格视图的代码:

public MainWindow()
    {
        InitializeComponent();

        ResultsView view = new ResultsView();
        ResultsViewModel model = new ResultsViewModel();

        GridView Grid = new GridView();

        foreach (DataColumn col in model.Results.Columns)
        {
            Grid.Columns.Add(new GridViewColumn
            {
                Header = col.ColumnName,
                DisplayMemberBinding = new Binding(col.ColumnName)
            });
        }

        view._listView.View = Grid;
        view.DataContext = model;

        view.SetBinding(ListView.ItemsSourceProperty, new Binding());

        _placeholder.Content = view;
    }

ResultsView xaml:

<UserControl x:Class="InDevReporting.Views.ResultsView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<Grid>
    <ListView x:Name="_listView" />
</Grid>

【问题讨论】:

    标签: wpf gridview mvvm binding datatable


    【解决方案1】:

    尝试将您的数据上下文设置为model.Results

    即改变这一行:

    view.DataContext = model;
    

    到这里:

    view.DataContext = model.Results;
    

    通常,您会在视图模型上创建依赖属性并在 XAML 中指定绑定。网格应该足够聪明,可以确定要绘制哪些列:

    <ListView ItemsSource="{Binding Results}" />
    
    public MainWindow()
    {
        InitializeComponent();
    
        // your code to instance and populate model
    
        this.DataContext = model;
    }
    
    public class ResultsViewModel : DependencyObject
    {
        public static readonly DependencyProperty ResultsProperty = DependencyProperty.Register("Results", typeof(DataTable) , typeof(ResultsViewModel));
        public DataTable Results
        {
            get { (DataTable)GetValue(ResultsProperty); }
            set { SetValue(ResultsProperty, value); }
        }
    }
    

    我是从记忆中提取出来的,如果代码不完全正确,请道歉。声明新依赖属性的最简单方法是使用propdp 代码 sn-p。需要记住很多语法。

    【讨论】:

    • @ChandlerPelhams,很乐意为您提供帮助。 :)
    猜你喜欢
    • 1970-01-01
    • 2015-04-29
    • 2015-05-24
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 2017-08-20
    • 2010-11-11
    相关资源
    最近更新 更多