列表框更新一次秒和工作中,我需要选择一些它的项目和执行命令,这是不可能的,因为列表框更新并失去它的选择项。
的ObservableCollection是我的列表视图模型。
我想到,也许有更好的解决方案的一些选项:
在列表中发现新的项目,传播并增加新项目的ObservableCollection未重新初始化的ObservableCollection
检测在旧项目的变化,必要时更新了自己的领域。
这是有点麻烦,但并不难,但是否还有其他选择吗?
更新,解决方案,我有
我选择了3-d部分:更新开始前,我保存排序的集合中选择指标并装入新的收集和比较与收旧。 我知道,这是效率不高,但对于目前的应用这符合得很好:藏品绝不会大于几百多,通常,不超过100集的每一个元素都支持急切和懒惰加载。 如果有更改的项目,他们从加载服务器的内容,而其他保持不变。 然后我更新观察到的集合,更新改变了从服务器项目,并在视图模型组选定的指数。 选择一个项目解决了手动更新后失去焦点的问题。
保存所选项目的关键是更新的列表中。 发现它在列表中的新版本,并重新选择它。 不要依赖于原来的基准,并允许其他一些同胞在新列表中删除可供选择。
如果你改变了项目的列表框的ItemsSource时的顺序这有时会发生。 当您暂时删除的项目,将其插入别的地方,WPF将提前设置的SelectedItem为null。 然后,当你回来将它添加,也不会被选中。
下面是你可以连接到你的列表框中的行为形式的解决方法。
http://www.codeproject.com/Tips/802806/Preserve-the-Selected-Item-of-a-WPF-List-Box
我想改变你的绑定集合到当前集合的一个新的实例。 一旦你开始选择项目。 一旦你完成设置回绑定到原来的集合
如果你有什么
添加一个类你的选择:
<select title="" id="" class="initMySelect"> </select>
针对类重新填充选择
从物体例如:
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);
}
- 你在做什么CRUD,将重新初始化类,这意味着该类将容纳所有跟上时代的变化。 所以之后的任何添加,更新,删除,EXE的功能
initMySelect();
查看您的选择时,所选择的指数依然会在那里为选择和u做额外的修改界面污物就会出现在你的选择。 4.功能添加上按钮,所选择的值发送到initMySelect事件侦听
var el = document.getElementById("repopulateSelect");
el.addEventListener("click", function() {
initMySelect(document.getElementById("selectTest").value);
}, false);
的jsfiddle链接: