Prismフレームワークを使用してWPF MVVMソリューションを実装する。WPF MVVM - DataGridセルクリック、列ヘッダーを取得
DataGridまたはGridViewを使用して表形式のデータを表示します。 次に、セルをクリックすると、CommandとCommandParameterとして、ColumnHeaderのキャプションが発生します。 (デビットの場合のみ&クレジット列は以下のコードで表示されます)デビット項目をクリックすると、その項目に金額がコピーされ、クレジット項目をクリックするとデビット項目が表示されます。クリアされ、値はCreditフィールドにコピーされます)
試行されたDataGridのみ、選択したレコードをViewModelに戻すことができます。 GridViewを使用すると、GridViewColumnヘッダーにコマンドを添付するだけで管理できます。
ご協力いただければ幸いです。現時点で
、これは私のコードは次のようになります。
の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>
ありがとうございました! コードを使用すると、ビューでSelectionUnit = "Cell"をDataGridに設定し、選択したレコードを手動で更新するだけでした。 –