私はこのWPFのことで恐ろしいので、我慢してください。
私は WPF に Xceed DataGrid を使用しています。誰かがいつ行を選択したかを知る必要がありますが、その方法がわかりません。これを有効にするには XAML を追加する必要があると確信していますが、何をすべきかわかりません。
私はMVVMアプローチを使用しているため、データバインディングを優先します。グリッドのViewModelオブジェクトのSelectedItemプロパティにSelectedItemプロパティをバインドします。
<xcdg:DataGridControl x:Name="grid" SelectedItem="{Binding SelectedItem}">
</xcdg:DataGridControl>
次に、プロパティセッターで、SelectedItemChanged()メソッドの変更時に必要なことをすべて実行できます。
private IMyItem _selectedItem;
public IMyItem SelectedItem
{
get { return _selectedItem; }
set {
_selectedItem = value;
OnPropertyChanged("SelectedItem");
SelectedItemChanged();
}
}
ICommand を介して選択通知を行うという前提条件があることを除いて、私は実際には同じことで少し苦労しています。ただし、この必要がない場合は、SelectionChanged イベント ハンドラーを関連付けることができます。かなり初歩的なことですが、念のためコードを含めます。
XAML:
<Grid>
<DataGrid:DataGridControl x:Name="gridControl" SelectionChanged="gridControl_SelectionChanged">
<!-- Content -->
</DataGrid:DataGridControl>
</Grid>
分離コード:
private void gridControl_SelectionChanged(object sender, Xceed.Wpf.DataGrid.DataGridSelectionChangedEventArgs e)
{
var selectedIndex = gridControl.SelectedIndex; // int index
var selectedItem = gridControl.SelectedItem; // instance of bound object
var selectedItems = gridControl.SelectedItems; // IList of bound objects
}
そうは言っても、ICommand を使用して Xceed DataGrid から選択された行を取得するためのエレガントなソリューションがあるかどうかを聞くことに非常に興味があります (私の場合、違いを生む可能性のある匿名型を使用しています)...
私は私のために最も簡単な方法を作りました。
<xctk:MaterialButton Margin="5,0,5,0" Grid.Column="3" Content="Szűrt sorok kijelölése" Command="{Binding SelectFilteredRowsCommand}" CommandParameter="{Binding ElementName=MyDataGrid}" />
だから、コマンドパラメータを使ってデータグリッドをビューモデルに送ります。
public RelayCommand<object> SelectFilteredRowsCommand { get; set; }
SelectFilteredRowsCommand = new RelayCommand<object>((o) =>
{
var datagrid = o as DataGridControl;
if (datagrid != null)
{
var datagriditems = datagrid.Items.Cast<SelectableProduct>();
foreach (SelectableProduct selectableProduct in datagriditems)
{
selectableProduct.IsSelect = true;
}
}
});
そして、datagrid itemsoruce タイプに戻します。
だからここに私が思いついたものがあります
System.ComponentModel.DependencyPropertyDescriptor gridItemsSourceDescriptor = System.ComponentModel.DependencyPropertyDescriptor.FromProperty(DataGridControl.SelectedItemProperty, typeof(DataGridControl));
gridItemsSourceDescriptor.AddValueChanged(dgBaxRuns, HandleSelectionChanged);