使用Prism框架实现WPF MVVM解决方案。
我想使用DataGrid或GridView显示表格数据。
然后,在单元格中单击时,它应触发一个Command并作为ColumnHeader的标题作为CommandParameter。
(仅对于下面的代码中显示的“借方和贷方”列。该代码最终将执行的操作是单击“借方”字段时,“金额”将复制到该字段。如果随后单击“贷方”字段,则将清除“借方”字段并将值复制到“信用”字段中)
尝试使用DataGrid,并且仅设法将所选记录传递回ViewModel。
使用GridView,仅设法将命令附加到GridViewColumn header 。
任何帮助将不胜感激。
此刻,我的代码如下所示:
ViewModel:
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");
}
}
看法:
<Grid x:Name="AccountingViewModelLevel">
<DataGrid Grid.Row="1"
ItemsSource="{Binding AccountingEntries}"
SelectedItem="{Binding SelectedAccount}"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserResizeColumns="False"
CanUserReorderColumns="False"
ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Auto"
SelectionMode="Single"
x:Name="AccountEntryDataGrid">
<DataGrid.InputBindings>
<MouseBinding Gesture="LeftDoubleClick"
Command="{Binding FieldClickedCommand}"
CommandParameter="{Binding ElementName=AccountEntryDataGrid, Path=SelectedItem}" />
</DataGrid.InputBindings>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding ID}" Header="No."/>
<DataGridTextColumn Binding="{Binding AccountName}" Header="Account Name"/>
<DataGridTextColumn Binding="{Binding Amount, StringFormat=0.00;;#}"
Header="Amount"
Width="90" />
<DataGridTextColumn Binding="{Binding Debit, StringFormat=0.00;;#}"
Header="Debit"
Width="90"
CellStyle="{StaticResource TrialBalanceStyle}"
>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding Credit, StringFormat=0.00;;#}"
Header="Credit"
Width="90"
CellStyle="{StaticResource TrialBalanceStyle}"
IsReadOnly="True"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
最佳答案
试试这个。它显然应该工作。
if(AccountEntryDataGrid.SelectedCells.Count == 1)
{
var selectedColumnHeader =
AccountEntryDataGrid.SelectedCells[0].Column.Header.ToString();
}
哎呀,对不起...
刚刚发现您正在使用MVVM。传递
SelectedCells
作为命令参数。它应该是IList<DataGridCellInfo>
类型。相应地为MVVM修改代码。也许是这样的。private void OnClicked(IList<DataGridCellInfo> selectedCells)
{
if(selectedCells.Count == 1)
{
var selectedColumnHeader = selectedCells[0].Column.Header.ToString();
}
}
尝试两种方式。祝你好运。
关于c# - WPF MVVM-DataGrid单元格单击,获取列标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38410585/