Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用MVVM从DataGrid获取SelectedItems_C#_Wpf_Collections_Telerik - Fatal编程技术网

C# 如何使用MVVM从DataGrid获取SelectedItems

C# 如何使用MVVM从DataGrid获取SelectedItems,c#,wpf,collections,telerik,C#,Wpf,Collections,Telerik,我正在使用C#构建一个WPF应用程序,并且在我的应用程序中使用了MVVM架构。 我使用数据模板在telerik gridview中创建了一个复选框列。我正在使用集合绑定GridView中的数据 当在网格上选中复选框时,如何查找已在该集合中选中的数据项的特定行号 我在网格上创建复选框的代码如下: <telerik:GridViewDataColumn.CellTemplate> <DataTemplate>

我正在使用C#构建一个WPF应用程序,并且在我的应用程序中使用了MVVM架构。 我使用数据模板在telerik gridview中创建了一个复选框列。我正在使用集合绑定GridView中的数据

当在网格上选中复选框时,如何查找已在该集合中选中的数据项的特定行号

我在网格上创建复选框的代码如下:

<telerik:GridViewDataColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
                                <CheckBox Name="StockCheckBox" IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type telerik:GridViewRow}}, Path=IsSelected}" />
                             </StackPanel>
                        </DataTemplate>
                    </telerik:GridViewDataColumn.CellTemplate>
任何人请告诉我一些建议,我如何才能做到这一点如何识别已选定的特定行


提前谢谢

我建议使用MVVM方法并使用绑定来获取所选项目。不幸的是,DataGrid没有为所选项目提供DependencyProperty,但您可以提供自己的属性。从DataGrid派生类,为SelectedItems注册依赖项属性,并重写SelectionChanged事件以更新依赖项属性。然后,可以使用绑定将所选项目通知ViewModel

代码:

公共类CustomDataGrid:DataGrid { 公共静态只读DependencyProperty CustomSelectedItemsProperty=DependencyProperty.Register( “CustomSelectedItems”、typeof(列表)、typeof(CustomDataGrid), 新属性元数据(新列表()); 公共列表CustomSelectedItems { 获取{return(List)GetValue(CustomSelectedItemsProperty);} set{SetValue(CustomSelectedItemsProperty,value);} } 选择更改时受保护的覆盖无效(SelectionChangedEventArgs e) { foreach(e.AddedItems中的变量项) CustomSelectedItems.Add(项目); foreach(e.RemovedItems中的var项) CustomSelectedItems.删除(项目); 基础。选举变更(e); } } XAML:



您需要全部3个问题的答案还是
如何使用MVVM从DataGrid获取SelectedItems
当选中网格上的复选框时,如何查找该集合中已选中DataItem的特定行号。
如何识别已选中的特定行?
您需要知道行号吗,还是只需要知道该行绑定到集合中的哪个对象?
   foreach (var AvailableStock in AvailableStocks)// In this **AvailableStocks**(IEnumurable Collection) I got all the datas in the Gridview 
        //In this collection How can i know that the particular RowItem is selected in that gridview by CheckBox
      {
          if (SelectedStock != null)
          {
             this.SelectedStocks.Add(AvailableStock );

             this.RaisePropertyChanged(Member.Of(() => AvailableStocks));
          }
      }
public class CustomDataGrid : DataGrid
{
    public static readonly DependencyProperty CustomSelectedItemsProperty = DependencyProperty.Register(
        "CustomSelectedItems", typeof (List<object>), typeof (CustomDataGrid), 
        new PropertyMetadata(new List<object>()));

    public List<object> CustomSelectedItems
    {
        get { return (List<object>) GetValue(CustomSelectedItemsProperty); }
        set { SetValue(CustomSelectedItemsProperty, value);}
    }

    protected override void OnSelectionChanged(SelectionChangedEventArgs e)
    {
        foreach(var item in e.AddedItems)
            CustomSelectedItems.Add(item);
        foreach (var item in e.RemovedItems)
            CustomSelectedItems.Remove(item);
        base.OnSelectionChanged(e);
    }
}
<Grid>
    <Ctrl:CustomDataGrid CustomSelectedItems="{Binding MySelectedItems}"/>
</Grid>