我正在尝试从我的模型中的一些数据中获取我的 View 中的 DataGrid。我想我必须重新组织我的 ViewModel 中的数据以在我的 View 中显示它们。 我是 MVVM 的新手,我想了解问题的两点:
- 考虑到我既不知道行数,也不知道列数,我应该使用哪种数据保存器?可观察集合<>? 更详细地说,每一行都有一个项目,每一列都有项目的一个方面。
- 如何设置 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/