我正在尝试从我的模型中的某些DATA获取视图中的DataGrid。我想我必须重新组织我的ViewModel中的DATA以在我的View中显示它们。 我是MVVM的新手,我想了解问题的两个要点:
行应该像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”时,我会看到表的属性(容量和计数)。
我真的需要一些帮助,因为我找不到解决方案。
答案 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
。