绑定到组合框并允许编辑:所选项目变为空

时间:2015-02-02 10:22:42

标签: c# wpf xaml binding combobox

我遇到一些绑定问题,我有ObservableCollection个字符串和所有我的组合框下拉项。应该可以从下拉菜单中选择一个值,也可以手动插入一些文本或组合这两种方法。

<ComboBox ItemsSource="{Binding AvailableAddressSymbols}" 
    Text="{Binding SelectedItem.LowerBound,
        ElementName=combobox_sys_data_protection}"
    HorizontalAlignment="Right" 
    IsEditable="True"
    DropDownOpened="SymbolAddressRefress_Dropdownopend" />
<ComboBox ItemsSource="{Binding AvailableAddressSymbols}" 
    Text="{Binding SelectedItem.UpperBound,
        ElementName=combobox_sys_code_protection}"
    IsEditable="True"
    DropDownOpened="SymbolAddressRefress_Dropdownopend" />

我绑定到该组合框的text属性以允许手动编写文本。一切都很好,但我有一个以上的组合框。 组合框的可用项目在下拉打开时刷新。

现在出现问题:当我在combobox1中选择一个值并且我想在combobox2中选择一个值时,来自combobox1的vaule被设置为&#34; &#34 ;;

刷新清除项目列表并添加新值,我认为这是问题,但我需要刷新它,因为可能会有新值。

    internal void refreshAvailableAddressSymbols()
    {
        AvailableAddressSymbols.Clear();
        for (int i = 0; 
             i < Database.ProjectConfiguration.AddressSymbols.Count;
             i++)
        {
          AvailableAddressSymbols.Add(
            Database.ProjectConfiguration
                .AddressSymbols[i].StartAddress);
          AvailableAddressSymbols.Add(
            Database.ProjectConfiguration
               .AddressSymbols[i].EndAddress);
        }
    }

1 个答案:

答案 0 :(得分:1)

一些背景知识:

在WPF中ComboBoxSelectedItem必须是下拉列表中的一个 - Items

这意味着:当您Clear() ObservalCollection绑定到ItemsSource时,上述条件不再成立且ComboBox清除SelecetdItem

为避免这种情况,有两种策略:

  1. 在本地变量中记住您选择的项目,清除项目, 将项目设置为新的集合ans然后将SelectedItem设置为项目 可在下拉列表中找到。

  2. 不要Clear()你的主题,而是更新列表(添加新的, 删除旧的元素)。只要你不删除 SelectedItem一切正常