【问题标题】:Binding to a combobox and allow editing: Selected Item becomes empty绑定到组合框并允许编辑:选定项变为空
【发布时间】:2015-04-01 06:23:17
【问题描述】:

我遇到了一些绑定问题,我的所有组合框下拉项都有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" />

我绑定到该组合框的文本属性以允许手动编写文本。一切正常,但我有不止一个这些组合框。 组合框的可用项目会在下拉菜单打开时刷新。

现在问题来了:当我在 combobox1 中选择一个值并且我想在 combobox2 中选择一个值时,combobox1 中的值设置为“”;

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

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

【问题讨论】:

    标签: c# wpf xaml binding combobox


    【解决方案1】:

    一些背景:

    在 WPF 中使用ComboBox 时,SelectedItem 必须始终是下拉列表之一-Items

    这意味着:在您 Clear() 绑定到 ItemsSource 的 ObservalCollection 的那一刻,上述条件不再成立,ComboBox 清除 SelecetdItem

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

    1. 在局部变量中记住您选择的项目,清除您的项目, 将项目设置为新的集合,然后将 SelectedItem 设置为现在的项目 在下拉列表中可用。

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

    【讨论】:

    • 有没有比使用组合框更好的解决方案?我只想有一些标准值,用户应该能够编辑它们....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多