如何在Xceed DataGrid中检测WPF中的行选择

时间:2009-10-27 15:20:07

标签: wpf datagrid xceed

我对这个WPF很恐怖,所以请耐心等待。

我正在使用Xceed DataGrid for WPF,我需要知道有人选择一行,但我无法弄清楚如何做到这一点。我确定我需要添加一些XAML来启用它,但我无法弄清楚我应该做些什么。

5 个答案:

答案 0 :(得分:3)

我使用MVVM方法,因此支持数据绑定。我将SelectedItem属性绑定到网格的ViewModel对象上的SelectedItem属性。

<xcdg:DataGridControl x:Name="grid" SelectedItem="{Binding SelectedItem}">
</xcdg:DataGridControl>

然后在你的属性上,setter可以在SelectedItemChanged()方法中进行更改。

private IMyItem _selectedItem;
public IMyItem SelectedItem
{
   get { return _selectedItem; }
   set { 
          _selectedItem = value;
          OnPropertyChanged("SelectedItem");
          SelectedItemChanged();
       }
}

答案 1 :(得分: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
        }

所有这一切,我很想知道是否有任何优雅的解决方案从Xceed DataGrid获取带有ICommand的选定行(在我的情况下,我使用的是匿名类型,这可能会有所不同) ...

答案 2 :(得分:1)

您不必为简单的事情编写复杂的代码......虽然它可能变得乏味,但这里有一些代码。我希望这会有所帮助:

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

答案 3 :(得分:0)

所以这就是我想出来的

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

答案 4 :(得分: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}" />

因此,我将带有命令参数的datagrid发送到viewmodel。

 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类型。