首页 文章

WPF使用CompositeCollection绑定ComboBox - 设置SelectedItem

提问于
浏览
1

我有一个绑定的WPF组合框,其ItemsSource设置为CompositeCollection . 我正在尝试这样做以适应在“常规”对象的ObservableCollection之前添加<Select>和<Add New ...>选项 . 我无法弄清楚如何在代码隐藏中选择其中一个添加的选项 .

这就是我构建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的情况(它是一个可选属性) . 在这种情况下,我想手动选择并显示<Select>选项 . 但无论我做什么(设置SelectedIndex被忽略,将CompositeValue设置为CompositeCollection中的ComboBoxItem被忽略)我在渲染时得到一个空白的ComboBox .

我很感激有关如何做到这一点的任何建议 .

谢谢!科里 .

1 回答

  • 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;
        }
    

    如果所选项目为空,则应该为您提供“<Select>”条目 .

相关问题