2012-08-08 53 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,你会得到遏制,从收集的物品。