我正在使用C#构建WPF应用程序,并且我在我的应用程序中使用了 MVVM架构。 我使用 DataTemplate 在telerik gridview中创建了一个 CheckBox列。我正在使用一个集合来绑定GridView中的数据。
如何在该集合中选择 DataItem的特定行号在网格上选中CheckBox时。
这里我在Grid上创建CheckBox的代码是:
<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>
我的收藏是,
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));
}
}
任何人请告诉我一些有关此问题的建议我如何实现这一目标? 如何识别已选择的特定行??
先谢谢。
答案 0 :(得分:0)
我建议使用MVVM方法并使用Binding来获取所选项目。不幸的是,DataGrid不为所选项提供DependencyProperty,但您可以提供自己的。从DataGrid派生一个类,为SelectedItems注册一个依赖项属性,并覆盖SelectionChanged事件以更新您的依赖项属性。然后,您可以使用Binding将ViewModel通知所选项目。
代码:
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);
}
}
XAML:
<Grid>
<Ctrl:CustomDataGrid CustomSelectedItems="{Binding MySelectedItems}"/>
</Grid>