2011-06-09 131 views
0

我使用的数据模板的组合框中设置复选框的值,例如:WPF获取复选框内容

<ComboBox Margin="118,117,163,164" ItemsSource="{Binding collection}"> 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <CheckBox Content="{Binding Name}"/> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
    </ComboBox> 

这工作,因为它应该。我的问题是,当用户选中该框时,我需要能够获取存储在复选框中的内容值。这可能吗?

谢谢。

+0

你是什么意思与 “值存储的复选框中的内容价值”? – Osiris76 2011-06-09 15:04:48

+0

我假设你的意思是你需要用户检查/选择的所有名称。 – Gishu 2011-06-09 15:05:54

+0

复选框的文本值存储为内容。 – 2011-06-09 15:08:08

回答

2

您需要将复选框的IsChecked属性绑定到每个项目的支持对象上的另一个属性。即具有名称的类型应公开一个布尔属性IsSelected。

数据绑定会适当地更新IsSelected属性,这对您在代码中访问会很容易。例如您可以遍历该列表并过滤所有具有IsSelected = false的项目。

代码示例

XAML

<StackPanel> 
     <ComboBox ItemsSource="{Binding Items}"> 
      <ComboBox.ItemTemplate> 
       <DataTemplate> 
        <CheckBox Content="{Binding Name}" IsChecked="{Binding IsSelected}"/> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 
     </ComboBox> 
     <Button Click="EvaluateSelectedItems">Show Selected</Button> 
     <TextBlock>Selected Items</TextBlock> 
     <ListBox ItemsSource="{Binding SelectedItems}" DisplayMemberPath="Name" Background="AliceBlue"/> 
    </StackPanel> 

代码隐藏

public MainWindow() 
{ 
    InitializeComponent(); 
    this.DataContext = this; 

    Items = new List<ItemVM> 
       { 
        new ItemVM {IsSelected = false, Name = "Firefox"}, 
        new ItemVM {IsSelected = false, Name = "Chrome"}, 
        new ItemVM {IsSelected = false, Name = "IE"} 
       }; 
} 

public IEnumerable<ItemVM> Items { get; set; } 
private IEnumerable<ItemVM> _selectedItems; 
public IEnumerable<ItemVM> SelectedItems 
{ 
    get { return _selectedItems; } 
    set 
    { 
     _selectedItems = value; 
     if (PropertyChanged != null) 
      this.PropertyChanged(this, new PropertyChangedEventArgs("SelectedItems")); 
    } 
} 

private void EvaluateSelectedItems(object sender, RoutedEventArgs e) 
{ 
    SelectedItems = Items.Where(item => item.IsSelected); 
} 
+0

不允许我在Checked属性上使用绑定,因为它表示它需要事件 – 2011-06-09 15:07:52

+1

属性名称是IsChecked,选中它时的事件是Checked。 – 2011-06-09 15:23:08

+0

@达伦 - 耶只是掩盖了那个..你想绑定的属性是IsChecked复选框上的布尔属性。更新.. – Gishu 2011-06-09 15:26:23