Поведение щелчка ячейки флажка в Telerik RadGridView не является интуитивно понятным и требует многократных щелчков - PullRequest
4 голосов
/ 14 января 2012

Я правильно связал Telerik RadGridView с первым столбцом, являющимся связанным флажком:

<telerik:GridViewCheckBoxColumn DataMemberBinding="{Binding Selected, Mode=TwoWay}"
                                Header="Generate" Width="95" IsReadOnly="False"/>

Я могу нажать и изменить состояние флажка без проблем.Проблема в том, что установка флажка не является интуитивно понятной.Чтобы пользователь установил флажок, он должен сначала щелкнуть ячейку флажка, снова щелкнуть, чтобы активировать, а затем снова щелкнуть, чтобы установить флажок.Три отдельных щелчка, чтобы установить флажок.

Есть ли лучший или родной способ сделать это без проблем?Я хочу, чтобы пользователь мог установить флажок и сразу же увидеть его, независимо от того, была ли уже выбрана строка / ячейка.Я хочу, чтобы пользователь мог сделать проверку в один клик.

Управление инфраструктурой могло бы быть сделано несколько лет назад.

Может кто-нибудь объяснить, как получить более интуитивное поведение флажков в Telerik RadGridView для Silverlight?

Ответы [ 2 ]

7 голосов
/ 14 января 2012

У меня недавно была такая же проблема, как и у вас. Чтобы исправить это, я поставил CheckBox в CellTemplate столбца:

    <telerik:GridViewDataColumn Header="Checkbox Column" IsReadOnly="True">
        <telerik:GridViewDataColumn.CellTemplate>
            <DataTemplate>
                <CheckBox IsChecked="{Binding Path=BooleanProperty, Mode=TwoWay}" />
            </DataTemplate>
        </telerik:GridViewDataColumn.CellTemplate>
    </telerik:GridViewDataColumn>

Обратите внимание, что я добавил свойство IsReadOnly="True" в столбец. Это не делает колонку доступной только для чтения; вы все равно сможете установить флажок и установить логическое свойство. Это свойство предотвращает использование ячеек в столбце CellEditTemplate при нажатии на них.

Обычно столбец RadGridView использует CellTemplate для просмотра и CellEditTemplate, когда ячейка переходит в режим редактирования. Однако нам не нужно использовать CellEditTemplate здесь, потому что CellTemplate вполне способен самостоятельно изменять значение этих логических свойств.

1 голос
/ 16 декабря 2014

На сайте документации telerik теперь есть несколько альтернатив подходу, указанному в принятом ответе:

ПРОБЛЕМА

Если выиметь столбец GridViewCheckBox для вашего вида сетки, по умолчанию необходимо щелкнуть три раза, чтобы изменить значение флажка - первые два щелчка перейдут в режим редактирования, а последний изменит значение.

Следующие решения дадут вам возможность контролировать количество кликов, необходимых для изменения значения столбца флажка.

РЕШЕНИЕ

Первый подход

2решение для щелчков

При установке свойства EditTriggers = "CellClick" в GridViewCheckBoxColumn ячейки перейдут в режим редактирования только одним щелчком мыши.Теперь вам понадобится еще один щелчок, чтобы изменить значение флажка.

1 клик решение

В дополнение к свойству EditTriggers = "CellClick" вы можете установить AutoSelectOnEdit = "True"свойство столбца GridViewCheckBox.Это свойство изменит проверенное состояние флажка, как только ячейка перейдет в режим редактирования, таким образом, изменив значение одним щелчком мыши.Обратите внимание, что GridView должен быть сфокусирован.

Это может быть сделано в XAML или в коде позади, когда столбцы автоматически генерируются:

XAML

<telerik:GridViewCheckBoxColumn Name="CheckBoxColumn"
            EditTriggers="CellClick"
            AutoSelectOnEdit="True"
            DataMemberBinding="{Binding IsChampion}" />

C #

private void gridView_AutoGeneratingColumn(object sender, GridViewAutoGeneratingColumnEventArgs e)
{
    var dataColumn = e.Column as GridViewDataColumn;

    if (dataColumn != null)
    {
        if (dataColumn.UniqueName.ToString() == "IsChampion")
        {
            // create GridViewCheckBoxColumn
            GridViewCheckBoxColumn newColumn = new GridViewCheckBoxColumn();
            newColumn.DataMemberBinding = dataColumn.DataMemberBinding;
            newColumn.Header = dataColumn.Header;
            newColumn.UniqueName = dataColumn.UniqueName;
            newColumn.EditTriggers = Telerik.Windows.Controls.GridView.GridViewEditTriggers.CellClick;
            newColumn.AutoSelectOnEdit = true;
            e.Column = newColumn;
        }
    }
}
...