首页 > 解决方案 > 如何使用 MVVM 模式绑定 Datagrid?

问题描述

目标:

我目前的目标是连接 Datagrid 和 ViewModel。ViewModel 当前具有从 MySQL 获取数据的代码。

不知道从这里去哪里,或者我是否做得正确......

Technical_Fsqm.xaml

<Grid>
    <TextBlock Text="FSQM"/>
    <DataGrid x:Name="FSQMData"
              AutoGenerateColumns="True"
              ItemsSource="{Binding data}" Margin="0,106,0,0"/>
</Grid>

Technical_Fsqm.xaml.cs

public partial class Technical_Fsqm : UserControl
{
    public Technical_Fsqm()
    {
        InitializeComponent();
        this.DataContext = new Technical_FsqmVM();
    }
}

技术_FsqmVM.cs

using Dapper;

public class Technical_FsqmVM : INotifyPropertyChanged
{

    public List<FsqmModel> data()
    {
        string query = "select * from table;";

        using (MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["MySQL"].ConnectionString))
        {
            var output = conn.Query<FsqmModel>(query).ToList();

            return output;
        }
    }


    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

模型

public class FsqmModel
{
    public int Id { get; set; }
    public string DocumentTitle { get; set; }

}

标签: c#wpfmvvm

解决方案


无法使用方法创建绑定,只能使用属性:

public partial class Technical_Fsqm : UserControl
{
    public Technical_Fsqm()
    {
        InitializeComponent();
        var vm = new Technical_FsqmVM();
        vm.LoadData();
        this.DataContext = vm;
    }
}

虚拟机

public List<FsqmModel> data { get; private set; }

public void LoadData();
{
    string query = "select * from table;";

    using (MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["MySQL"].ConnectionString))
    {
        data = conn.Query<FsqmModel>(query).ToList();
    }
}

推荐阅读