2011-11-22 122 views
0

上午使用列表框項目中的複選框,如何選中和取消選中列表框中的所有複選框?如何選中和取消選中列表框中的已選框項目?

<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; 
     } 
+0

*設置* ItemsSource不完全是數據綁定。 –

回答

4

一些事情要考慮。

1)首先使用一個ObservableCollection(首選)或一個的BindingList而不是列表作爲數據源

2)確保你在你的類執行INotifyPropertyChanged。看一個例子here

3)現在你已經正確地設置了綁定,循環訪問集合,並使用foreach或其他循環將checked屬性設置爲false。結合系統將處理其餘部分,並在列表中的更改將正確地反映在UI

UPDATE:增加了一個簡短的代碼示例

在你的後臺代碼:

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

在uu類中實現INotifyPropertyChanged:

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 
} 
+0

robo有它的權利。看起來您已經正確設置了數據綁定,但確保您的項目實現INotifyPropertyChanged接口很重要。否則,您可以在代碼中設置屬性,但不會反映在用戶界面上。 ObservableCollection 對確保ListBox知道何時從集合中添加或刪除項目很重要,但它不應該影響複選框是否更改。 –

+0

+1是的,這個答案比我的更全面。這些是XAML綁定中的關鍵元素,在做這樣的事情時應該被理解。 –

1

您通常只使用數據綁定,如下面所示。

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

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

我推斷從數據綁定的Ck變量名,並從你的示例代碼的ItemsSource類型。

+0

是否有可能做這種foreach(listBoxItems中的ListBoxItem項) { CheckBox ch =(CheckBox)item; ch.IsChecked = true; } – Vero009

+1

@ Vero009:你做不到這一點,你甚至不希望做到這一點。 –

+1

@ Vero009:如果您實施INotifyPropertyChanged,則不需要那樣做。更改uu類對象上的值將通過您已經設置的綁定自動反映到UI中。無需嘗試直接訪問控制 – robowahoo

相關問題