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

}

wpf 数据网格复选框“通知目标已更新”不起作用

尝试使用双向模式:

<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}"/>