DataGrid генерирует новую строку при проверке радиокнопки - PullRequest
0 голосов
/ 16 августа 2011

Я пытаюсь использовать сетку данных, привязанную к коллекции объектов с двумя параметрами.Сетка данных должна позволять мне вставлять новые строки, тем самым создавать новые объекты.

Первый столбец, связанный с первым параметром, является текстовым столбцом.Вторым должен быть столбец шаблона, содержащий радиокнопку, которая использует конвертер BoolToInt (не имеет значения) для установки значения для второго свойства.

При отображении уже существующих строк в сетке также отображаютсяпустая строка, используемая для вставки нового объекта.Таким образом, у нас есть две возможности вставки нового объекта в список / сетку: 1. Сначала мы набираем что-то в текстовом столбце, а затем проверяем радиокнопку. 2. Сначала мы проверяем радиокнопку, а затем вводим что-то в текстовый столбец *.1005 *

Первый вариант, работает просто отлично.Второй не делает: когда я проверяю радио-кнопку, а затем иду и набираю что-то в столбце текста, радио-кнопка просто отключается.На самом деле он исчезает, потому что, когда я начинаю печатать текст, в сетке создается новая строка с новой радиокнопкой.Первый, который я проверил, - это тот, что в пустой строке, позволяющий мне добавлять новые строки, и он продолжает идти в конец списка всякий раз, когда я вставляю новую строку.

Я думаю, что это должно быть решено принудительносетка для создания новой строки при проверке радиокнопки, точно так же, как при вводе в текстовом столбце.

Это сетка данных:

<DataGrid ItemsSource="{Binding Path=Rows}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=param1, TargetNullValue=''}">
            </DataGridTextColumn>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <RadioButton VerticalAlignment="Center" IsChecked="{Binding Path=param2, Converter={StaticResource RPLBoolToIntConverter}, ConverterParameter=1}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>            
    </DataGrid>

И это код позади,создание некоторых объектов для отображения:

CPL cpl = new CPL();            
        cpl.Rows = new List<CPLRow>()
        {
            new CPLRow(){ param1=80001, param2=20304},
            new CPLRow(){ param1=80002, param2=20304},
            new CPLRow(){ param1=80003, param2=20304}
        };
        DataContext = cpl;

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

Заранее спасибо!

1 Ответ

0 голосов
/ 16 августа 2011

Я не согласен с вашим утверждением, которое я только что проверил, теперь в следующей пустой строке.Это все та же кнопка, но есть еще один ряд.Я думаю, что ваша проблема в том, что событие check / check не срабатывает, пока кнопка не потеряет фокус (например, вы переходите в текстовое поле).В привязке необходимо установить UpdateSourceTrigger = PropertyChanged.

...