1

私はこのWPFのことで恐ろしいので、我慢してください。

私は WPF に Xceed DataGrid を使用しています。誰かがいつ行を選択したかを知る必要がありますが、その方法がわかりません。これを有効にするには XAML を追加する必要があると確信していますが、何をすべきかわかりません。

4

5 に答える 5

3

私は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();
       }
}
于 2010-03-29T19:36:53.833 に答える
1

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 から選択された行を取得するためのエレガントなソリューションがあるかどうかを聞くことに非常に興味があります (私の場合、違いを生む可能性のある匿名型を使用しています)...

于 2009-10-28T13:26:10.813 に答える
0

私は私のために最も簡単な方法を作りました。

<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 タイプに戻します。

于 2016-05-27T08:16:04.600 に答える
0

だからここに私が思いついたものがあります

    System.ComponentModel.DependencyPropertyDescriptor gridItemsSourceDescriptor = System.ComponentModel.DependencyPropertyDescriptor.FromProperty(DataGridControl.SelectedItemProperty, typeof(DataGridControl));
    gridItemsSourceDescriptor.AddValueChanged(dgBaxRuns, HandleSelectionChanged);
于 2009-10-28T16:07:11.810 に答える