Мой класс:WPF DataGrid Checkbox NotifyOnTargetUpdated не работает
public class BarCode : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public string code { get; set; }
public string name { get; set; }
public Visibility special1 { get; set; }
public Visibility special2 { get; set; }
private bool _x1, _x2;
public bool x1
{
get
{
return _x1;
}
set
{
if (value && _x2)
_x2 = false;
_x1 = value;
OnPropertyChanged("X1");
}
}
public bool x2
{
get
{
return _x2;
}
set
{
if (value && _x1)
_x1 = false;
_x2 = value;
OnPropertyChanged("X2");
}
}
}
XAML:
<DataGridTemplateColumn Header="X">
<DataGridTemplateColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="Visibility" Value="{Binding special1}"></Setter>
</Style>
</DataGridTemplateColumn.CellStyle>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=.x1, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="X">
<DataGridTemplateColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="Visibility" Value="{Binding special2}"></Setter>
</Style>
</DataGridTemplateColumn.CellStyle>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=.x2, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
У меня есть два CheckBoxes
. Когда первый проверяется, и я хочу проверить второй, то первый из них должен быть отменен. Но это не обновление. Галочка уходит только тогда, когда я прокручиваюсь из видимости.
EDIT: Я изменил распределение _x1 = false и _x2 = false в сеттерах на x1 = false и x2 = false. Спасибо dkozl за ваш комментарий.
public bool x1
{
get
{
return _x1;
}
set
{
if (value && _x2)
_x2 = false;
x1 = value;
OnPropertyChanged("X1");
}
}
public bool x2
{
get
{
return _x2;
}
set
{
if (value && _x1)
_x1 = false;
x2 = value;
OnPropertyChanged("X2");
}
}
}
своих свойства являются '' x1' и x2' но вы увеличиваете событие для 'X1' и' X2' (капитал X), а имена свойств чувствительны к регистру. Также, когда вы меняете x2 в x1 setter, сделайте это 'x2 = false;' или событие для 'x2', а также – dkozl
Спасибо dkozl, он работает, когда я использую в setter x2 выделение _x1-x1. – raze92