Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF MVVM-数据网格单元格单击,获取列标题_C#_Wpf_Mvvm_Datagrid - Fatal编程技术网

C# WPF MVVM-数据网格单元格单击,获取列标题

C# WPF MVVM-数据网格单元格单击,获取列标题,c#,wpf,mvvm,datagrid,C#,Wpf,Mvvm,Datagrid,使用Prism框架实现WPF MVVM解决方案 我想使用DataGrid或GridView显示表格数据。 然后,当在单元格中单击时,它应该触发一个命令,并作为CommandParameter触发ColumnHeader的标题。 (仅适用于以下代码中的借方和贷方列。代码最终将执行的操作是在借方字段中单击时,金额将复制到该字段。如果在贷方字段中单击,则借方字段将被清除,值将复制到贷方字段中) 已尝试使用DataGrid,并且仅设法将所选记录传递回ViewModel。 使用GridView,只能将命令

使用Prism框架实现WPF MVVM解决方案

我想使用DataGrid或GridView显示表格数据。 然后,当在单元格中单击时,它应该触发一个命令,并作为CommandParameter触发ColumnHeader的标题。 (仅适用于以下代码中的借方和贷方列。代码最终将执行的操作是在借方字段中单击时,金额将复制到该字段。如果在贷方字段中单击,则借方字段将被清除,值将复制到贷方字段中)

已尝试使用DataGrid,并且仅设法将所选记录传递回ViewModel。 使用GridView,只能将命令附加到GridViewColumn标题

任何帮助都将不胜感激

目前,我的代码是这样的:

视图模型:

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();
    }
}