c# - 设计我的模型以绑定(bind)到 DataGrid 项目和标题

标签 c# wpf mvvm datagrid wpfdatagrid

我正在尝试从我的模型中的一些数据中获取我的 View 中的 DataGrid。我想我必须重新组织我的 ViewModel 中的数据以在我的 View 中显示它们。 我是 MVVM 的新手,我想了解问题的两点:

  1. 考虑到我既不知道行数,也不知道列数,我应该使用哪种数据保存器?可观察集合<>? 更详细地说,每一行都有一个项目,每一列都有项目的一个方面。
  2. 如何设置 DataGrid 的标题?

行应该像 1,2,3... 这些列应该有它们的特定名称。

这是我的尝试:

主窗口.xaml:

<DataGrid AutoGenerateColumns="false" ItemsSource="{Binding MyTable}" />

MainWindowViewModel.cs:

private ObservableCollection<List<MyItem>> _myTable;
public class MyItem
{
    public MyItem(string value)
    {
        Value= value;
    }
    public string Value{ get; set; }
}
public ObservableCollection<List<MyItem>> MyTable
{
    get
    {
        return _myTable;
    }

    set
    {
        _myTable = value;
        RaisePropertyChanged("MyTable");
    }
}

命令的执行是:

private void DisplayDataTableExecute()
    {
        MyTable = new ObservableCollection<List<MyItem>>();
        var temp = new List<MyItem>();
        temp.Add(new MyItem("one"));
        temp.Add(new MyItem("two"));
        temp.Add(new MyItem("three"));
        MyTable.Add(temp);
        temp = new List<MyItem>();
        temp.Add(new MyItem("ONE"));
        temp.Add(new MyItem("TWO"));
        temp.Add(new MyItem("THREE"));
        MyTable.Add(temp);
    }

当我使用 AutoGenerateColumns="false"时,我只看到一些行(正确的数字但为空)当我使用 AutoGenerateColumns="true"时,我看到表的属性(容量和计数)。

我真的需要一些帮助,因为我找不到解决方案。

最佳答案

这里主要有两个问题:

首先:您不能在不设置列的情况下使用 AutoGenerateColumns = "false"。你需要自己映射这些,即:

<DataGrid AutoGenerateColumns="false" ItemsSource="{Binding MyTable}" >
    <DataGrid.Columns>
        <DataGridTextColumn Header="Value"  Binding="{Binding Value}"/>
    </DataGrid.Columns>
</DataGrid>

请注意,您可以只设置 AutoGenerateColumns="true",这将为您的类中的每个属性提供一列。

其次:如果您希望在代码中所做的更改反射(reflect)在 UI 中,则需要让您的类 (class MyItem) 实现 INotifyPropertyChanged

关于c# - 设计我的模型以绑定(bind)到 DataGrid 项目和标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22307987/

相关文章:

c# - C#中如何订阅其他类(class)的事件?

c# - 使用 RhinoMocks,如何在没有空构造函数的情况下模拟或 stub 具体类?

c# - WPF-C# 同步线程池线程

c# - 完成WPF中TextBox触发事件的工作

Silverlight:关于 mvvm 模式的初学者问题

C# WPF 拖放列表框 MVVM

c# - 从 C# 到 C++ 触发 COM 事件的正确方法是什么

c# - Linq 仅查询每个唯一 ID 的前 N ​​行

c# - MVVM INotifyPropertyChanged - 线程问题?

c# - 将 CustomControl DependencyProperty 绑定(bind)到 ViewModel 枚举