WPF绑定对象

时间:2017-07-01 15:49:15

标签: c# wpf data-binding

我对ListBox及其绑定有一点问题。 一切都很好,除非我调用函数LstExtensionUnSelectAll()因为 没有改变,再次检查复选框。

我认为这是一件愚蠢的事,但我没有看到它。

<ListBox ItemsSource="{Binding LstExtension, Mode=TwoWay}" Grid.Row="0">
    <ListBox.ItemTemplate>
        <HierarchicalDataTemplate>
            <CheckBox Content="{Binding Extension}" IsChecked="{Binding Checked}"/>
        </HierarchicalDataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

这里是对象LstExtension:

public class CustomExtensions
{
    public string Extension { get; set; }
    public bool Checked { get; set; }

    public CustomExtensions(string ext)
    {
        Extension = ext;
        Checked = true;
    }
}

private List<CustomExtensions> _LstExtension;
public IEnumerable<CustomExtensions> LstExtension
{
    get { return _LstExtension; }
    set
    {
        if (value != _LstExtension)
        {
            _LstExtension = value.ToList();
            NotifyPropertyChanged("LstExtension");
        }
    }
}

internal void LstExtensionUnSelectAll()
{
    _LstExtension?.ForEach(c => c.Checked = false);
    NotifyPropertyChanged("LstExtension");
}

1 个答案:

答案 0 :(得分:0)

您需要更新CustomExtensions课程以使用INotifyPropertyChanged,以便Checked在值发生变化时引发事件。

public class CustomExtensions : INotifyPropertyChanged
{
    public string Extension { get; set; }

    private bool _checked;
    public bool Checked 
    {
        get { return _checked; }
        set
        {
            if (_checked == value) return;
            _checked = value;
            RaisePropertyChanged("Checked");
        }
    }

    public CustomExtensions(string ext)
    {
        Extension = ext;
        Checked = true;
    }

    public virtual event PropertyChangedEventHandler PropertyChanged;
    protected virtual void RaisePropertyChanged(string name)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
    }
}