【问题标题】:wpf binding by selected value - swap out bound object without disturbing binding通过选定值绑定 wpf - 在不干扰绑定的情况下交换绑定对象
【发布时间】:2011-02-12 22:01:57
【问题描述】:

我已经将组合框绑定到自定义集合类型 - 它基本上是一个被覆盖的 ObservableCollection,我添加了一个工具来更新基础集合(通过 Unity)。

我不想过多混淆这个问题,但这就是背景。

我的 xaml 看起来像这样

<ComboBox ItemsSource="{Binding Manufacturers}" DisplayMemberPath="Name"  SelectedValuePath="ID" SelectedValue="{Binding Vehicle.ManufacturerID}" />

在我被覆盖的集合中,我正在这样做。

var index = IndexOf(oldItem);
this[index] = (T)newItem;

我曾希望因为它受值约束,所以将新对象(具有相同 id)插入旧对象上会起作用。但似乎虽然它受 SelectedValue 的约束,但它仍然知道它被换成了另一个。该组合只是失去了选择。

有人可以帮忙吗?

【问题讨论】:

    标签: c# wpf xaml binding observablecollection


    【解决方案1】:

    在这种情况下,我假设您的 oldItem 是 SelectedValue?

    当您移除此项目时,您的绑定会立即更新。因此,从列表中删除该值将清除您的选择。

    如果要替换项目,您可能想尝试获取 SelectedValue,将其保存在变量中,然后在替换项目后设置 SelectedValue,如下所示:

    object oldValue = SelectedValue;
    //Do awesome stuff to replace things
    SelectedValue = oldValue;
    

    HTH

    【讨论】:

    • 您好,感谢您的帮助,但由于我的代码在我重写的 ObservableCollection 中,我无法访问组合框的 SelectedValue。还有其他想法吗?
    • 嗯,你是对的......你能用新的属性值“更新”现有项目吗?
    • 有趣的是,我也有同样的想法,并使用反射来复制属性。看起来效果不错!
    猜你喜欢
    • 2015-07-23
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多