Список флажков wpf не обновляется - PullRequest
5 голосов
/ 29 июля 2011

У меня есть следующие элементы пользовательского интерфейса - один список флажков и один флажок с переключением всех флажков в этом списке -

<DockPanel>
    <CheckBox
        Name="SelectCheckboxes"
        Command="{Binding ToggleCheckBoxes}"
        Content="Whatever"/>
</DockPanel>
<DockPanel>
    <ListBox Name="MyListBox"
             ItemsSource="{Binding Path=MyProperty, Mode=TwoWay}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <CheckBox Name="MyCheckBox"
                          Content="{Binding myvalue}"
                          Tag="{Binding mycode}"
                          IsChecked="{Binding Path=isChecked, Mode=TwoWay}"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</DockPanel>

А вот свойство MyProperty -

public ObservableCollection<SomeEntity> MyProperty
{
    get { return _someEntities; }
    set
    {
        if (value == _someEntities)
            return;

        _someEntities = value;
        base.OnPropertyChanged("MyProperty");
    }
}

ИВот команда ToggleCheckBoxes -

public ICommand ToggleCheckBoxes
{
    get
    {
        if (_toggleCheckBoxesCommand == null)
        {
            _toggleCheckBoxesCommand = new RelayCommand(
                param => this.toggleCheckBoxes()
                );
        }
        return _toggleCheckBoxesCommand;
    }
}

void toggleCheckBoxes()
{
    foreach (var i in MyProperty)
    {
        if (i.isChecked)
            i.isChecked = false;
        else
            i.isChecked = true;
    }
}

Когда я нажимаю на флажок, чтобы переключить флажки, я могу посмотреть на свойство в коде и увидеть, что свойство isChecked изменилось, но ListBox не обновляетсячтобы показать, что все элементы отмечены / не отмечены.

Кто-нибудь видит что-то, что мне не хватает, что может привести к тому, что ListBox не будет обновляться?

Спасибо за любые мысли.

1 Ответ

7 голосов
/ 29 июля 2011

Убедитесь, что ваш isChecked член действительно является свойством и что SomeEntity реализует INotifyPropertyChanged.Что-то вроде:

public class SomeEntity : INotifyPropertyChanged {
    private bool _isChecked;
    public bool isChecked
    {
        get { return _isChecked; }
        set
        {
            if (value == _isChecked)
                return;

            _isChecked= value;
            this.NotifyPropertyChanged("isChecked");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(info));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...