在Grid上选中复选框时,GridView行不会选择或受影响

时间:2012-02-10 11:18:05

标签: c# wpf telerik

我正在使用带有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
}

先谢谢。

1 个答案:

答案 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传递。