2012-08-08 23 views
1

如何獲得選擇的複選框的項目我有一個列表框,其中項目包含複選框: 我想要得到的字符串Content爲該用戶選擇從列表框中

  <ListBox Name="SendCodecsNamelistBox" 
        Height="52" 
        Margin="150,128,31,65" 
        ItemsSource="{Binding .}"> 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <CheckBox Content="{Binding Path=.}" /> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 
+1

這是什麼束縛至?從支持UI的數據源獲取所需的信息可能會更好,而不是直接從UI獲取信息。 – Dan 2012-08-08 03:30:19

回答

2

你可以這樣定義

public class Model 
{ 
    public string Content { get; set; } 
    public bool IsSelected { get; set; } 
} 

的模型,並將其綁定到複選框

 <ListBox.ItemTemplate> 
      <DataTemplate> 
       <CheckBox Content="{Binding Path=Content}" IsChecked="{Binding Path=IsSelected, Mode=TwoWay}" /> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 

     var data = new List<Model>() 
     { 
      new Model{ Content = "item1", IsSelected = false}, 
      new Model{ Content = "item2", IsSelected = false}, 
      new Model{ Content = "item1", IsSelected = false}, 
      new Model{ Content = "item3", IsSelected = false} 
     }; 

     SendCodecsNamelistBox.ItemsSource = data; 

然後你就可以得到你想要的東西像這樣

var selectedContents = data.Where(i => i.IsSelected) 
          .Select(i => i.Content) 
          .ToList(); 
0

這就是爲什麼WPF和MVVM耦合在一起的每個複選框。因爲你可以在ItemsTemplate中放入任何東西,直接從GUI獲取有關選中項目的信息是一件痛苦的事情。

綁定你ListBox具有IsChecked財產視圖模型的集合,不是綁定該屬性CheckBox.IsChecked,你會得到遏制,從收集的物品。