我正在使用数据模板在组合框中设置复选框的值,如下所示:
<ComboBox Margin="118,117,163,164" ItemsSource="{Binding collection}">
<ComboBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
这样可行。我的问题是,当用户选中该复选框时,我需要能够获取存储在复选框中的内容值。这可能吗?
感谢。
答案 0 :(得分:2)
您需要将Checkbox的 IsChecked 属性绑定到每个项目的后备对象上的另一个属性。即具有Name的类型应该公开一个布尔属性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);
}