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