DataGrid создание столбца RadioButton - PullRequest
12 голосов
/ 24 марта 2011

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

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

        <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;
    }

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

Ответы [ 2 ]

13 голосов
/ 24 марта 2011

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

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

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

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

1 голос
/ 05 апреля 2012

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

...