如何在WPF中的用户控件(使用MVVM实现)的集合控件中修复选定的Item

时间:2010-01-14 11:32:03

标签: wpf mvvm selecteditem

我希望有人可以帮助我...

Josh Smith撰写了一篇关于“使用模型 - 视图 - 模型的WPF应用程序”的精彩文章,并在其文章中包含以下code sample

如果您下载代码示例并运行应用程序并查看所有客户,请选择公司(例如第4家公司),然后单击“创建新客户”(将打开新客户的选项卡),然后单击回到“所有客户”选项卡,然后使用键盘尝试将所选项目直接移动到当前所选项目上的项目,它不会!相反,选择器再次从顶部开始。

我不确定为什么会发生这种情况,但是我想要它,这样当你点击它时,它会向上移动一个项目,而不是从列表的顶部开始。我怀疑这与FocusManager有关,但我不确定。

有人知道为什么控件会以这种方式运行吗?是否可能,以及我应采取什么方法来修改此代码并使其不“重置”所选项目?

我已根据此模板实施了一个项目,出于功能原因,我需要让键盘将选择器向上移动。如果没有它重置。

1 个答案:

答案 0 :(得分:1)

在您提供的示例中,设置IsSelected属性不会影响逻辑焦点,因此默认情况下会设置焦点。目前我想到的解决方法是强制关注代码隐藏中的元素。作为示例,向listview的selectionchanged添加处理程序,如下所示:

  private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
  {
    if (e.AddedItems.Count == 0 || e.RemovedItems.Count > 0) return;
    var item = (CustomerViewModel) e.AddedItems[0];
    var container = (UIElement) listView1.ItemContainerGenerator.ContainerFromItem(item);
    container.Focus();
  }