我正在使用带有Telerik Gridview的 WPF应用程序表使用C#。
在Gridview中,我使用数据模板插入了复选框。
创建但当我点击或选中复选框时,当前行未被选中。
我该如何解决这个问题?
请有人告诉我这个问题的解决方案。
我在网格中创建复选框的xaml代码是:
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<CheckBox Name="CheckBox" IsChecked="{Binding IsSelected,UpdateSourceTrigger=PropertyChanged}" Click="CheckBox_Click" />
</StackPanel>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
在该复选框中,我创建了点击事件。
我还希望知道复选框点击事件中gridview Placed行的当前行号。给我一些建议。
这里我的CheckBox Click事件代码:
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
CheckBox selectedCheckbox = (CheckBox)sender;
//this.selectedCasePackRadGrid -- This is my gridview
// Here I want to get the selected row number
}
先谢谢。
答案 0 :(得分:1)
首先,我没有看到您实际上将行设置为Selected
。
您的绑定当前正在DataContext中设置名为IsSelected
的属性。如果此属性确实存在,则可以将其绑定到样式
GridViewRow.IsSelected
<Style TargetType="{x:Type telerik:GridViewRow}">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
如果您的数据对象中不存在,则需要使用RelativeSource
绑定来查找GridViewRow
并绑定到它的IsSelected
属性
Checked="{Binding RelativeSource={RelativeSource AncestorType={x:Type telerik:GridViewRow}}, Path=IsSelected}"
至于查找行号,我知道没有RowIndex
属性可用于查找行号。另一种方法是获取GridView的ItemsSource
并调用IndexOf(dataobject)
,但这确实打破了MVVM层的分离
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
CheckBox checkBox = (CheckBox)sender;
var dataItem = checkBox.DataContext as MyDataItem;
var parentDataObject = myGridView.ItemsSource as SomeDataObject;
if (dataItem == null || parentDataObject == null)
return;
var index = parentDataObject.SomeCollection.IndexOf(dataItem);
// Do something with index
}
还有其他替代方法,例如将AlternationCount
设置为高于行数的内容,并访问GridViewRow.AlternationIndex
,但我不知道这是否适用于Telerik的GridView
}
但也许你能做的最好的事情是评估你真正需要索引的内容,看看你是否可以使用其他替代方案来完成你想要的东西。例如,如果要将所选行的索引传递给按钮命令,最好将SelectedItem
作为CommandParameter传递。