【问题标题】:WPF Combobox selection disappears when the an item is deleted in the list bound to combobox当在绑定到组合框的列表中删除项目时,WPF组合框选择消失
【发布时间】:2015-05-18 15:03:05
【问题描述】:

我有一个组合框被操纵为

<ComboBox x:Name="HeadComboBox" ItemsSource="{Binding DataContext.HeadList, RelativeSource={RelativeSource FindAncestor,AncestorType= {x:Type views:FixedAssetBaseWholeUC}}}" Margin="195,78,86,0" VerticalAlignment="Top" SelectedItem="{Binding HeadItem}" DisplayMemberPath="Name" />

datacontext.HeadList 将指向:

public List<FixedAssetHeadItem> HeadList
    {
        get
        {
            return _headList;
        }
        set
        {
            if (_headList != value)
            {
                _headList = value;
                RaisePropertyChanged("HeadList");
            }
        }
    }

我禁用组合框所在的 UserControl 并加载另一个控件来编辑标题列表中的项目

            DeleteFromHeadList(1);

            FixedAssetBaseWholeViewModel fbwvm = (FixedAssetBaseWholeViewModel)Fabwuc.DataContext;
            fbwvm.HeadList = HeadList;

当编辑完成后,重新启用用户控件只是为了发现选择消失。

调试显示 http://postimg.org/image/hdz4h4px3/

我该如何处理?

【问题讨论】:

  • 当您选择的项目变为 null 或选择的索引为 -1 时,您可以检查 setter 属性,然后将其设置回第一个项目或第一个索引。您可以创建一个属性绑定到选定的索引并设置它。
  • 在哪里可以找到所选项目的 setter 属性?
  • 我使用DeleteFromHeadList 来检查并且从不删除已经链接到另一个对象的项目。所以我的选择绝不会变成空值。
  • 如果这是定义属性的方式,那么 public dynamic HeadItem { get { return headItem;} **set { headItem = value; // This is setter in your view model }** } 粗体是您的设置器

标签: c# wpf combobox


【解决方案1】:

您不应绑定到 List (can cause memory leak),而应绑定到 ObservableCollection&lt;&gt;。这样,您的 ComboBox 应该会适当更新。此外,您的 HeadItem 应该是 INPC 属性 - 在 setter(私有或公共,取决于您的代码)中应该引发属性更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 2015-04-08
    • 2018-10-23
    相关资源
    最近更新 更多