UWP - 在同一页面上的框架内导航后,列表框滚动到顶部

时间:2016-07-20 21:54:25

标签: c# .net windows uwp

好的,很难解释,但它让我发疯...它是Windows 10上的UWP应用程序:

我有一个主要页面,其中一个大部分是一个框架(显示主要内容页面)在右边是一个用户控件,其中有一个列表框 - 当在列表中选择一个项目时,它加载了主要内容页面使用一个用户控件事件进入框架,然后在框架上调用Navigate方法 - 一切正常,除了...如果你向下滚动列表然后单击一个项目,页面加载但列表框滚动到列表的顶部 - 真的很令人沮丧!!我不明白为什么会这样做或者理解发生了什么 - 有人可以解释一下吗?

我知道它没有重新加载内容,并且选定项目仍然处于选中状态且不会改变。

1 个答案:

答案 0 :(得分:0)

我对Unity不熟悉,但经过对项目的一些研究,我认为每次选择一个项目时,都会在ListBox中重新加载所有项目。例如,您可以查看名为“PersonPicker”的UserControl

    private void cbCategory_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (isLoaded)
           people.AddFilterAndOrder("Person Category," + ((ViewModel.SystemConfiguration.SystemData.WorkCategory)cbCategory.SelectedItem).PluralTitle, loadModel: true);
    } 

然后我在AddFilterAndOrder中找到了BaseListVM方法:

    public void AddFilterAndOrder(string filter = "", string order = "", bool loadModel = false)
    {
        if (filter != "")
        {
            string[] items = filter.Split(';');

            foreach (string i in items)
            {
                string[] pair = i.Split(',');

                if (pair[1] == "")
                    filters.Remove(pair[0]);
                else
                    if (filters.Keys.Contains(pair[0]))
                    filters[pair[0]] = pair[1];
                else
                    filters.Add(pair[0], pair[1]);
            }
        }

        if (order != "")
        {
            string[] items = order.Split(';');

            foreach (string i in items)
            {
                string[] pair = i.Split(',');

                if (pair[1] == "")
                    orders.Remove(pair[0]);
                else
                    if (orders.Keys.Contains(pair[0]))
                    orders[pair[0]] = pair[1];
                else
                    orders.Add(pair[0], pair[1]);
            }
        }

        if (loadModel) LoadModel();
    }

由于您将“loadModel”作为true传递给此方法,因此将执行LoadModel()方法,我不会再次粘贴您的LoadModel()方法,而是在LoadModel方法中,您清除项目并再次重新加载项目。这就是为什么我说你可能刷新了你的清单。

所以,也许你可以试试:

people.AddFilterAndOrder("Person Category," + ((ViewModel.SystemConfiguration.SystemData.WorkCategory)cbCategory.SelectedItem).PluralTitle, loadModel: false); 

选择一个项目时。