GridView Row не выбирается или не затрагивается, когда флажок установлен на сетке - PullRequest
0 голосов
/ 10 февраля 2012

Я использую Форму заявки WPF с Telerik Gridview с использованием 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>

В этом флажке я создал событие click.

А также я хочу, чтобы знал текущий номер строки строки CheckBox Placeced в окне сетки в событии щелчка флажка .Дайте мне несколько советов для этого.

Здесь My CheckBox Щелкните по событию Код:

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 Ответ

1 голос
/ 10 февраля 2012

Прежде всего, я не вижу, чтобы вы фактически устанавливали строку как 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...