设计我的模型以绑定到DataGrid项和标题

时间:2014-03-10 18:10:34

标签: c# wpf mvvm datagrid wpfdatagrid

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

  1. 请记住,我既不知道行数,也不知道列数,我应该使用哪种数据持有者?的ObservableCollection<&GT ;? 更详细的每一行都有一个项目,每一列都有项目的一个方面。
  2. 如何设置DataGrid的标头?
  3. 行应该像1,2,3那样... 列应具有其特定名称。

    这是我的尝试:

    MainWindow.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”时,我会看到表的属性(容量和计数)。

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

1 个答案:

答案 0 :(得分:1)

这里有两个主要问题:

首先:如果没有设置列,则无法使用AutoGenerateColumns = "false"。你需要通过自己来映射这些,即:

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

请注意,您只需设置AutoGenerateColumns="true",即可为您的班级中的每个媒体资源添加一列。

第二:如果您希望在UI中反映代码中的更改,则需要使您的类(class MyItem)实现INotifyPropertyChanged