我有一个绑定的WPF comboBox,其ItemsSource设置为CompositeCollection。我正在尝试这样做以适应添加< Select>和<添加新...>在“常规”对象的ObservableCollection之前的选择。我无法弄清楚如何在代码隐藏中选择其中一个添加的选项。
这就是我构建CompositeCollection的方法:
private CompositeCollection CreateItemsSource(ObservableCollection<T> source)
{
CompositeCollection cmpc = new CompositeCollection();
cmpc.Add(new ComboBoxItem { Content = "<Select>" });
cmpc.Add(new ComboBoxItem { Content = "<Add New...>" });
var cc1 = new CollectionContainer { Collection = source };
cmpc.Add(cc1);
return cmpc;
}
这就是ComboBox的样子:
<DataTemplate x:Key="LookupComboTemplate">
<TextBlock Text="{Binding}"/>
</DataTemplate>
<ComboBox ItemsSource="{Binding SubCategories.ItemsSource}"
ItemTemplate="{StaticResource LookupComboTemplate}">
<ComboBox.SelectedItem>
<Binding Path="SourceData.SubCategoryObj" Mode="TwoWay"></Binding>
</ComboBox.SelectedItem>
</ComboBox>
我遇到的情况是SelectedItem SourceData.SubCategoryObj为null(它是一个可选属性)。在这种情况下,我想手动选择并显示&lt; Select&gt;选择。但无论我做什么(设置SelectedIndex被忽略,将CompositeValue设置为CompositeCollection中的ComboBoxItem被忽略)我在渲染时得到一个空白的ComboBox。
我很感激有关如何做到这一点的任何建议。
谢谢! 科里。
答案 0 :(得分:1)
您应该能够使用SelectedItem绑定的自定义valueconverter来解决此问题。 http://wpftutorial.net/ValueConverters.html应该给你一些指示。
我不确定combox是否想要一个简单的字符串或一些复合对象,但你可以检查一下。像
这样的东西public class ComboConverter: IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return "<Select>";
return value;
}
public object ConvertBack(object value, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
if (value.toString().Equals("<Select>")
return null;
return value;
}
应该为您提供“&lt; Select&gt;”如果所选项目为空,则输入。