Как определить выбор строки в Xceed DataGrid для WPF - PullRequest
1 голос
/ 27 октября 2009

Я ужасен в этой вещи WPF, так что терпите меня.

Я использую Xceed DataGrid для WPF, и мне нужно знать, когда кто-то выбирает строку, но я не могу понять, как это сделать. Я уверен, что мне нужно добавить XAML, чтобы включить это, но я не могу понять, что мне делать.

Ответы [ 5 ]

3 голосов
/ 29 марта 2010

Я использую подход MVVM и поэтому поддерживаю привязку данных. Я свяжу свойство SelectedItem со свойством SelectedItem в моем объекте ViewModel для сетки.

<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();
       }
}
1 голос
/ 19 октября 2011

Вам не нужно писать сложный код для чего-то простого ... хотя это может стать утомительным, вот код для вас. Надеюсь, это поможет:

<Style TargetType="xcdg:DataRow">
   <EventSetter Handler="dr_PreviewMouseDown" Event="PreviewMouseDown" />
</Style>

void dr_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
   DataRow dr = sender as DataRow;

   Debug.WriteLine(sender);
}
1 голос
/ 28 октября 2009

Я на самом деле немного борюсь с тем же, за исключением того, что у меня есть предварительное условие, чтобы уведомление о выборе было сделано через 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
        }

Все это говорит, мне очень интересно узнать, есть ли какие-нибудь элегантные решения для получения выбранной строки из Xceed DataGrid с помощью ICommand (в моем случае я использую анонимные типы, которые могут иметь значение) ...

0 голосов
/ 27 мая 2016

Я сделал для меня самый простой способ.

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

И преобразовать обратно в сетку данных типа типа.

0 голосов
/ 28 октября 2009

Так вот что я придумал

    System.ComponentModel.DependencyPropertyDescriptor gridItemsSourceDescriptor = System.ComponentModel.DependencyPropertyDescriptor.FromProperty(DataGridControl.SelectedItemProperty, typeof(DataGridControl));
    gridItemsSourceDescriptor.AddValueChanged(dgBaxRuns, HandleSelectionChanged);
...