Подтвердить что ты не робот

DataGrid создает столбец RadioButton

У меня есть объекты, привязанные к DataGrid. Я создал столбец переключателя, привязанный к свойству Is Default объекта.

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

        <DataGrid CanUserAddRows="False" AutoGenerateColumns="False" Name="TEst" >
        <DataGrid.Columns >
            <DataGridTextColumn Header="Value" Binding="{Binding Path=Name, Mode=OneTime}"/>

            <DataGridTemplateColumn Header="Is Default">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <RadioButton GroupName="Test" IsChecked="{Binding IsDefault}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

        </DataGrid.Columns>
    </DataGrid>

 private class Test : INotifyPropertyChanged
    {
        public string Name
        {
            get;
            set;
        }
        bool isDefult;
        public bool IsDefault
        {
            get
            {
                return isDefult;
            }
            set
            {
                isDefult = value;
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }

    public MainWindow()
    {
        this.InitializeComponent();
        Test[] ya = new Test[] { new Test { Name = "1", IsDefault = false }, new Test { Name = "2", IsDefault = false }, new Test { Name = "3", IsDefault = true } };

        this.TEst.ItemsSource = ya;
    }

Я вытягивал свои волосы весь день. Любая помощь будет любима.

4b9b3361

Ответ 1

Это довольно странно, но все, что вам нужно сделать, это изменить привязку RadioButton:

<RadioButton GroupName="Test" IsChecked="{Binding IsDefault, UpdateSourceTrigger=PropertyChanged}" />

Насколько мне известно, значением по умолчанию является LostFocus, но есть некоторые проблемы с фокусом внутри DataGrid. Я не знаю, почему проблема возникает.

И еще одна проблема: поднимите событие PropertyChanged внутри установщика свойства IsDefault. Теперь все работает отлично без уведомлений, но если вы добавите больше кода xaml, будет сложно узнать, почему пользовательский интерфейс не обновляется.

Ответ 2

Настройка UpdateSourceTrigger=PropertyChanged здесь недостаточна. Вам также нужно Mode=TwoWay