wpf 数据网格复选框“通知目标已更新”不起作用
本文关键字:目标 已更新 不起作用 通知 数据 数据网 网格 复选框 wpf | 更新日期: 2023-09-27 18:37:25
My Class:
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
.当第一个被选中并且我想检查第二个时,第一个应该取消检查。但它没有更新。复选标记仅在我滚动出可见性时离开。
编辑:我将分配_x1 = false和_x2 = false更改为x1 = false和x2 = false。感谢您的评论。
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");
}
}
}
尝试使用双向模式:
<CheckBox IsChecked="{Binding Path=.x1, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True}"/>
如果您只想让一个复选框影响另一个复选框的状态,那么元素绑定也会有所帮助。
我认为你过度思考你的绑定表达式
你有这个
<CheckBox IsChecked="{Binding Path=.x2, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True}"/>
当你需要它的时候
<CheckBox IsChecked="{Binding Path=x2, Mode=TwoWay}"/>