我知道这个问题与Accessing items in ObservableCollection bound to WPF DataGrid类似
但是这个问题的答案并没有帮助我。
我在ObservableCollection所在的位置创建了一个类(DataItem.cs)。
另一个类(SelectableViewModel.cs),其中“列”的属性在其中。
public class DataItem : INotifyPropertyChanged
{
public ObservableCollection<SelectableViewModel> FirmCustomerItems { get; set; } = new ObservableCollection<SelectableViewModel>();
}
public class SelectableViewModel : INotifyPropertyChanged
{
private string _columnName;
public string ColumnName
{
get { return _columnName; }
set
{
if (_columnName== value) return;
_columnName= value;
OnPropertyChanged();
}
}
}
如果我不想访问SelectedItem/Value/Items [0],我将得到以下结果:
“MyProject.SelectableViewModel”。
这就是我要访问SelectedItem的方式:
DataGrid dataGrid = sender as DataGrid;
switch (dataGrid.Name)
{
case "FirmCustomerTableDataGrid":
//var selected = dataGrid.SelectedValue; // my First try
//var selected = dataGrid.SelectedItem; // my Second try
var selected = dataGrid.SelectedItems[0] // my Third try
MessageBox.Show(selected.ToString());
break;
}
我在问题顶部的链接问题的答案无效,因为我有一个用于列属性的类(SelectableViewModel)。
但是我不知道要解决这个问题,因为我对MVVM不太熟悉(其余代码是代码隐藏的)
最佳答案
您需要将该项目转换为SelectableViewModel
:
var selected = dataGrid.SelectedItems[0] as SelectableViewModel;
if (selected != null)
MessageBox.Show(selected.ColumnName);