没有更新列表框输球选择的项目,WPF(Updating listbox without losing

2019-09-23 20:37发布

列表框更新一次秒和工作中,我需要选择一些它的项目和执行命令,这是不可能的,因为列表框更新并失去它的选择项。

的ObservableCollection是我的列表视图模型。

我想到,也许有更好的解决方案的一些选项:

  1. 在列表中发现新的项目,传播并增加新项目的ObservableCollection未重新初始化的ObservableCollection

  2. 检测在旧项目的变化,必要时更新了自己的领域。

这是有点麻烦,但并不难,但是否还有其他选择吗?

更新,解决方案,我有

我选择了3-d部分:更新开始前,我保存排序的集合中选择指标并装入新的收集和比较与收旧。 我知道,这是效率不高,但对于目前的应用这符合得很好:藏品绝不会大于几百多,通常,不超过100集的每一个元素都支持急切和懒惰加载。 如果有更改的项目,他们从加载服务器的内容,而其他保持不变。 然后我更新观察到的集合,更新改变了从服务器项目,并在视图模型组选定的指数。 选择一个项目解决了手动更新后失去焦点的问题。

Answer 1:

保存所选项目的关键是更新的列表中。 发现它在列表中的新版本,并重新选择它。 不要依赖于原来的基准,并允许其他一些同胞在新列表中删除可供选择。



Answer 2:

如果你改变了项目的列表框的ItemsSource时的顺序这有时会发生。 当您暂时删除的项目,将其插入别的地方,WPF将提前设置的SelectedItem为null。 然后,当你回来将它添加,也不会被选中。

下面是你可以连接到你的列表框中的行为形式的解决方法。

http://www.codeproject.com/Tips/802806/Preserve-the-Selected-Item-of-a-WPF-List-Box



Answer 3:

我想改变你的绑定集合到当前集合的一个新的实例。 一旦你开始选择项目。 一旦你完成设置回绑定到原来的集合



Answer 4:

如果你有什么

  1. 添加一个类你的选择:

    <select title="" id="" class="initMySelect"> </select>

  2. 针对类重新填充选择

从物体例如:

  var object={
  "6db01de6-a1e8-4ea6-bf01-4562b56468b9": {
    "UID": "6db01de6-a1e8-4ea6-bf01-4562b56468b9",
    "name": "aa",
    "description": "aa"
  },
  "284c3172-268a-4342-d3f0-d00fafd3d482": {
    "UID": "284c3172-268a-4342-d3f0-d00fafd3d482",
    "name": "bb",
    "description": "bb"
  },
  "b124f4df-6caa-43e8-eb97-536076b4832b": {
    "UID": "b124f4df-6caa-43e8-eb97-536076b4832b",
    "name": "cc",
    "description": "cc"
  },
  "c934634a-0775-41bd-d72a-d8900ebcbdd1": {
    "UID": "c934634a-0775-41bd-d72a-d8900ebcbdd1",
    "name": "dd",
    "description": "dd"
  },
  "fb5b8dcb-b9fb-405d-9fcf-3f551727459a": {
    "UID": "fb5b8dcb-b9fb-405d-9fcf-3f551727459a",
    "name": "ee",
    "description": "ee"
  },
  "a98f3449-bb55-46e3-b9ce-f9e2dd6d74a9": {
    "UID": "a98f3449-bb55-46e3-b9ce-f9e2dd6d74a9",
    "name": "ff",
    "description": "ff"
  }
}
function initMySelect(value) {
    var options = "";
    var selected = "";

    $.each(object, function(k, v) {
      if (value === v.UID) {
        selected = 'selected = "selected"';
      } else {
        selected = "";
      }
      options += '<option ' + selected + ' value=' + v.UID + '>' + v.name + '</option>';
    });

  $('.initMySelect').html(options);
}
  1. 你在做什么CRUD,将重新初始化类,这意味着该类将容纳所有跟上时代的变化。 所以之后的任何添加,更新,删除,EXE的功能
initMySelect();

查看您的选择时,所选择的指数依然会在那里为选择和u做额外的修改界面污物就会出现在你的选择。 4.功能添加上按钮,所选择的值发送到initMySelect事件侦听

var el = document.getElementById("repopulateSelect");
el.addEventListener("click", function() {
    initMySelect(document.getElementById("selectTest").value);
}, false);

的jsfiddle链接:



文章来源: Updating listbox without losing selected item, WPF
标签: wpf listbox