Прежде всего, я не вижу, чтобы вы фактически устанавливали строку как 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
, хотя я не знаю, будет ли это работать с GridView
от Telerik. Но, возможно, лучшее, что вы можете сделать, - это оценить, для чего на самом деле нужен индекс,и посмотрите, сможете ли вы использовать какую-то другую альтернативу для достижения того, чего вы хотите.Например, если вы хотите передать индекс выбранной строки команде кнопки, было бы лучше просто передать SelectedItem
в качестве CommandParameter.