ComboBox в ListBox не обновляет IsChecked должным образом - PullRequest
1 голос
/ 25 марта 2011

Я создал CheckedListBox, используя следующее:

<ListBox x:Name="lst_checkBoxList" ItemsSource="{Binding}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <CheckBox Content="{Binding Name}" IsChecked="{Binding IsChecked}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

и заполняю его, используя следующее:

public List<CheckedListItem> listItems = new List<CheckedListItem>();

public class CheckedListItem
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool IsChecked { get; set; }

    public CheckedListItem(int id, string name, bool ischecked)
    {
        Id = id;
        Name = name;
        IsChecked = ischecked;
    }
}

private void button1_Click(object sender, RoutedEventArgs e)
{
    listItems.Add(new CheckedListItem(0, "item 1", false));
    listItems.Add(new CheckedListItem(0, "item 2", false));
    listItems.Add(new CheckedListItem(0, "item 3", false));
    listItems.Add(new CheckedListItem(0, "item 4", false));
    lst_checkBoxList.ItemsSource = listItems;
    listItems[0].IsChecked = true; //This correctly sets the first CheckBox as checked.
}

private void button2_Click(object sender, RoutedEventArgs e)
{
    listItems[0].IsChecked = true; //This does not affect the CheckBox, despite changing the value it is bound to.
}

Если я изменяю данные за одним из CheckBoxes сразу послеустановив ItemsSource, CheckBox отмечен соответствующим образом, но если я попытаюсь изменить значение в другом месте кода, CheckBox останется непроверенным ... может кто-нибудь помочь мне разобраться почему?

Ответы [ 2 ]

1 голос
/ 25 марта 2011

Необходимо уведомить элемент управления о том, что свойство, с которым оно связано, было обновлено, путем реализации интерфейса INotifyPropertyChanged в CheckedListItem:

public class CheckedListItem : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private bool _IsChecked;
    public bool IsChecked 
    { 
        get { return _IsChecked; }
        set 
        {
            _IsChecked = value;
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs("IsChecked"));
        }
    }
}
0 голосов
/ 25 марта 2011

Вам необходимо реализовать интерфейс INotifyPropertyChanged в классе CheckedListItem, а затем уведомлять о любых изменениях свойств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...