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;
}
Я вытягивал свои волосы весь день. Любая помощь будет любима.
Ответы
Ответ 1
Это довольно странно, но все, что вам нужно сделать, это изменить привязку RadioButton:
<RadioButton GroupName="Test" IsChecked="{Binding IsDefault, UpdateSourceTrigger=PropertyChanged}" />
Насколько мне известно, значением по умолчанию является LostFocus, но есть некоторые проблемы с фокусом внутри DataGrid. Я не знаю, почему проблема возникает.
И еще одна проблема: поднимите событие PropertyChanged
внутри установщика свойства IsDefault
. Теперь все работает отлично без уведомлений, но если вы добавите больше кода xaml, будет сложно узнать, почему пользовательский интерфейс не обновляется.
Ответ 2
Настройка UpdateSourceTrigger=PropertyChanged
здесь недостаточна. Вам также нужно Mode=TwoWay