Как установить и установить флажок в поле списка? - PullRequest
0 голосов
/ 22 ноября 2011

Am Используя флажок в элементах списка, как установить и снять все флажки в списке?

<ListBox Height="168" HorizontalAlignment="Left" Margin="45,90,0,0" Name="listBox1" VerticalAlignment="Top" Width="120">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <CheckBox Content="{Binding Name}" IsChecked="{Binding Ck, Mode=TwoWay}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Привязка данных:

        List<uu> xx = new List<uu>();
        xx.Add(new uu { Name = "A", Ck = false });
        xx.Add(new uu { Name = "A", Ck = false });
        listBox1.ItemsSource = xx;

Обновление:

Можно ли сделать что-то вроде этого:

 foreach (ListBoxItem item in listBox1.Items)
        {
            CheckBox ch = (CheckBox)item;
            ch.IsChecked = true;
        }

Ответы [ 2 ]

4 голосов
/ 22 ноября 2011

Несколько вещей для рассмотрения.

1) Сначала используйте ObservableCollection (предпочтительно) или BindingList вместо List в качестве источника данных

2) Убедитесь, что вы внедрили INotifyPropertyChanged в своем классе.См. Пример здесь

3) Теперь, когда вы правильно настроили привязку, переберите коллекцию и установите для свойства selected значение false, используя цикл foreach или другой цикл.Система привязки будет обрабатывать все остальное, и изменения в вашем списке будут должным образом отражены в пользовательском интерфейсе

ОБНОВЛЕНИЕ: Добавлен краткий пример кода

В вашем коде позади:

    ObservableCollection<uu> list = new ObservableCollection<uu>();        

    MainWindow()
    {
        InitializeComponent();

        // Set the listbox's ItemsSource to your new ObservableCollection
        ListBox.ItemsSource = list;
    }

    public void SetAllFalse()
    {
        foreach (uu item in this.list)
        {
            item.Ck = false;
        }
    }

Реализация INotifyPropertyChanged в классе uu:

public class uu: INotifyPropertyChanged
{
    private bool _ck;

    public bool Ck
    {
        get { return _ck; }
        set
        {
            _ck = value;
            this.NotifyPropertyChanged("Ck");
        }
    }

    private void NotifyPropertyChanged(string name)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    #endregion
}
1 голос
/ 22 ноября 2011

Обычно вы просто используете привязки данных, как показано ниже.

List<uu> items = listbox1.ItemsSource as List<uu>();

foreach (var item in items)
   item.Ck = true;

Я выведу имя переменной Ck из ваших привязок данных и тип ItemsSource из вашего примера кода.

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