我有一个绑定的WPF comboBox,它的ItemsSource设置为CompositeCollection。我尝试这样做是为了适应在“常规”对象的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为空的情况(这是一个可选属性)。在本例中,我希望手动选择并显示选项。但是无论我做什么(设置SelectedIndex被忽略,将SelectedValue设置为CompositeCollection中的ComboBoxItem也被忽略),当它呈现时,我得到一个空白的ComboBox。
如果有任何关于我如何做到这一点的建议我将不胜感激。
谢谢!科里。
发布于 2013-06-05 05:52:21
你应该能够用你的SelectedItem绑定的定制值转换器来修复这个问题。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;
}如果所选项目为空,则应显示"“条目。
https://stackoverflow.com/questions/16927998
复制相似问题