C# WPF MVVM-数据网格单元格单击,获取列标题
使用Prism框架实现WPF MVVM解决方案 我想使用DataGrid或GridView显示表格数据。 然后,当在单元格中单击时,它应该触发一个命令,并作为CommandParameter触发ColumnHeader的标题。 (仅适用于以下代码中的借方和贷方列。代码最终将执行的操作是在借方字段中单击时,金额将复制到该字段。如果在贷方字段中单击,则借方字段将被清除,值将复制到贷方字段中) 已尝试使用DataGrid,并且仅设法将所选记录传递回ViewModel。 使用GridView,只能将命令附加到GridViewColumn标题 任何帮助都将不胜感激 目前,我的代码是这样的: 视图模型:C# WPF MVVM-数据网格单元格单击,获取列标题,c#,wpf,mvvm,datagrid,C#,Wpf,Mvvm,Datagrid,使用Prism框架实现WPF MVVM解决方案 我想使用DataGrid或GridView显示表格数据。 然后,当在单元格中单击时,它应该触发一个命令,并作为CommandParameter触发ColumnHeader的标题。 (仅适用于以下代码中的借方和贷方列。代码最终将执行的操作是在借方字段中单击时,金额将复制到该字段。如果在贷方字段中单击,则借方字段将被清除,值将复制到贷方字段中) 已尝试使用DataGrid,并且仅设法将所选记录传递回ViewModel。 使用GridView,只能将命令
public AccountingViewModel(IAccountingView view, IRegionManager manager, IEventAggregator eventAggregator)
:base(view, manager, eventAggregator)
{
AccountingEntries = new ObservableCollection<AccountingModel>();
FieldClickedCommand = new DelegateCommand<string>(OnClicked);
}
private void OnClicked(string column)
{
//Update corresponding field in record clicked cell
}
private AccountingModel _selectedAccount;
public AccountingModel SelectedAccount
{
get { return _selectedAccount; }
set
{
_selectedAccount = value;
OnPropertyChanged("SelectedAccount");
}
}
private ObservableCollection<AccountingModel> _accountingEntries;
public ObservableCollection<AccountingModel> AccountingEntries
{
get { return _accountingEntries; }
set
{
_accountingEntries = value;
OnPropertyChanged("AccountingEntries");
}
}
public accountingview模型(IAccountingView视图、IRegionManager管理器、IEventAggregator事件聚合器)
:base(视图、管理器、事件聚合器)
{
AccountingEntries=新的ObservableCollection();
FieldClickedCommand=新的委派命令(OnClicked);
}
单击专用void(字符串列)
{
//更新记录单元格中的相应字段
}
私人账户模式_选择账户;
公共帐户模型选定帐户
{
获取{return\u selectedAccount;}
设置
{
_selectedAccount=值;
已更改的不动产(“选定账户”);
}
}
私人可观测集合会计;
公共可观测集合会计
{
获取{return\u accountingEntries;}
设置
{
_会计=价值;
不动产变更(“会计”);
}
}
视图:
试试这个。它显然应该起作用
if(AccountEntryDataGrid.SelectedCells.Count == 1)
{
var selectedColumnHeader =
AccountEntryDataGrid.SelectedCells[0].Column.Header.ToString();
}
哎呀。。。很抱歉
刚刚发现您正在使用MVVM。将SelectedCells
作为命令参数传递。它应该是IList
类型。相应地修改MVVM的代码。也许是这样的
private void OnClicked(IList<DataGridCellInfo> selectedCells)
{
if(selectedCells.Count == 1)
{
var selectedColumnHeader = selectedCells[0].Column.Header.ToString();
}
}
private void onclick(IList selectedCells)
{
如果(selectedCells.Count==1)
{
var selectedColumnHeader=selectedCells[0]。Column.Header.ToString();
}
}
两种方法都试。祝你好运。谢谢!使用您的代码,在视图上只需在DataGrid上设置SelectionUnit=“Cell”,并手动更新所选记录。
private void OnClicked(IList<DataGridCellInfo> selectedCells)
{
if(selectedCells.Count == 1)
{
var selectedColumnHeader = selectedCells[0].Column.Header.ToString();
}
}