我有自定义ComboBox
的{{1}}。 ComboBoxItem
包含ComboBoxItem
和TextBlock
。 CheckBox
绑定到我的ViewModel中的bool属性。当我点击CheckBox
时,一切正常,但当我点击CheckBox
- TextBlock
关闭时!我需要' MultiSelection'我的ComboBox
XAML:
ComboBox
VM:
<ComboBox ItemsSource="{Binding Elements}">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<TextBlock Text="{Binding Caption}"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
答案 0 :(得分:1)
如果不进行大量调整,你就无法在封闭的组合框中真正显示多项选择,所以我猜这部分并不是真的需要。所以我建议你使用一个按钮和一个弹出窗口,其中弹出窗口包含一个列表视图,为你的项目启用了多项选择。
作为Button,我使用Extended WPF Toolkit中的DropDownButton
,你也可以用不同的方式实现它。
介绍Extended WPF Toolkit命名空间:
xmlns:xt="http://schemas.xceed.com/wpf/xaml/toolkit"
实际的事情:
<xt:DropDownButton Content="Elements Selection" VerticalAlignment="Top" HorizontalAlignment="Left" MinWidth="100">
<xt:DropDownButton.DropDownContent>
<ListView ItemsSource="{Binding Elements}" SelectionMode="Multiple" MinWidth="100">
<ListView.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource AncestorType=ListViewItem}}">
<CheckBox.Content>
<TextBlock Text="{Binding Caption}"/>
</CheckBox.Content>
</CheckBox>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Style>
</ListView.ItemContainerStyle>
</ListView>
</xt:DropDownButton.DropDownContent>
</xt:DropDownButton>
反映WPF中属性更改的另一个重要细节:您的属性更改通知需要来源而不是null
!
protected void RaisePropertyChanged(string _property)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler.Invoke(this, new PropertyChangedEventArgs(_property));
}
}
答案 1 :(得分:0)
将Content
的{{1}}属性绑定到您的CheckBox
媒体资源,并使用展开Caption
容器的ItemContainerStyle
:
ComboBoxItem