我正在使用 Xceed checkable combobox 。现在我想根据组合框中选中的复选框显示默认文本,但我不知道该怎么做。
例如:
文本框的内容(红色箭头)应为:
像:
示例-代码:
XAML:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
Title="MainWindow" Height="350" Width="525">
<Grid>
<xctk:CheckComboBox x:Name="_checkComboBox"
Height="22"
VerticalAlignment="Stretch"
ItemsSource="{Binding Names}"
SelectedItemsOverride="{Binding SelectedNames}"
DisplayMemberPath="Title"
Delimiter=", "
Width="100"/>
</Grid>
</Window>
CS:
using System.Windows;
namespace WpfApplication1
{
using System.Collections.ObjectModel;
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
_checkComboBox.DataContext = this;
Names = new ObservableCollection<People>()
{
new People() { Title = "Mikel" },
new People() { Title = "Tom" },
new People() { Title = "Jennifer" },
new People() { Title = "Megan" },
};
SelectedNames = new ObservableCollection<People>();
}
public ObservableCollection<People> Names
{
get;
set;
}
public ObservableCollection<People> SelectedNames
{
get;
set;
}
}
public class People
{
public string Title
{
get;
set;
}
}
}
答案 0 :(得分:5)
使用值转换器。
这样的事情应该有效:
XAML:
SelectedItemsOverride="{Binding SelectedNames,
Converter={StaticResource SelectedNamesConverter}},
ConverterParameter={Binding Names}}"
C#:
public class SelectedNamesConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if ((List<string>)value.length() == 0):
return "Please select";
if (((List<string>)value).length() == ((List<string>)parameter).length())
return "All people";
return "Specific selection";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
// Log this as a non-fatal error. You shouldn't be here!
return DependencyProperty.UnsetValue;
// Alternatively:
// throw new NotImplementedException();
}
}
并使名称成为依赖属性:
public static DependencyProperty NamesProperty = DependencyProperty.Register(
"Names",
typeof(ObservableCollection<People>),
typeof(MainWindow));
public ObservableCollection<People> Names
{
get { return (ObservableCollection)GetValue(NamesProperty); }
private set { SetValue(NamesProperty, value); }
}
使MainWindow继承自DependencyObject:
public class MainWindow : DependencyObject