Tac*_*ree 9 wpf listview multipleselection
问题解释:
给出包含10个项目的列表.
例如:
listView.SelectedIndex = 4;
//or
listView.SelectedItems.Add(listView.Items[4]);
Run Code Online (Sandbox Code Playgroud)
该项目已正确选择.
一种解决方案是模拟鼠标点击事件,该事件有效,但有副作用.它也是hacky的方式.
似乎鼠标事件存储起始项目.
有什么我忽略了吗?
我在MSDN上询问过这个问题.令人惊讶的是,这个问题的原因是SelectionMode
问题可能出在ListBox代码中(ListView派生自ListBox):
protected override void OnSelectionChanged(SelectionChangedEventArgs e)
{ ...
if ((this.SelectionMode == SelectionMode.Single) && (base.SelectedItem != null))
{
...
if (selectedItem != null)
{
this.UpdateAnchorAndActionItem(selectedItem);
}
}
Run Code Online (Sandbox Code Playgroud)
如果SelectionMode是Extended,则不会调用UpdateAnchorAndActionItem(selectedItem).
所以,在后面的代码中你必须做下一步:
list.SelectionMode = SelectionMode.Single;
list.SelectedIndex = 4;
list.SelectionMode = SelectionMode.Extended;
Run Code Online (Sandbox Code Playgroud)
不太了解MVVM的情况.
Upd1
我已经创建了自定义ListView.它将在上述逻辑内部完成.在这种情况下,即使在MVVM中,它也必须按预期工作.我希望它会对你有所帮助.
public class MyListView:ListView
{
protected override void OnSelectionChanged(SelectionChangedEventArgs e)
{
//if it is multiselection than execute standard logic
if(SelectedItems.Count!=1)
{
base.OnSelectionChanged(e);
return;
}
var mode = SelectionMode;
SelectionMode = SelectionMode.Single;
base.OnSelectionChanged(e);
SelectionMode=mode;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3489 次 |
最近记录: |