簡體   English   中英

UWP-在同一頁面的框架中瀏覽后,列表框滾動到頂部

[英]UWP - Listbox scrolls to top after navigating within a frame on the same page

好的,棘手的人可以解釋一下,但是它使我發瘋……Windows 10上的UWP應用:

我有一個主頁,其中很大一部分是框架(顯示主要內容頁面),右邊是一個用戶控件,其中帶有一個列表框-在列表中選擇一個項目時,它將加載主要內容頁面使用用戶控制事件進入框架,然后該事件在框架上調用Navigate方法-一切正常,除非...如果您向下滾動列表然后單擊某個項目,則頁面會加載,但列表框會滾動到頁面頂部列表-真令人沮喪! 我看不到為什么會這樣做或無法理解正在發生的事情,請問有人可以說清楚嗎?

我知道它不會重新加載內容,並且selecteditem保持選中狀態並且不會更改。

我對Unity不熟悉,但是在對項目進行研究后,我認為每次選擇一個Item時,都將所有項目重新加載到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);
    } 

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

    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”作為真實值傳遞給此方法, LoadModel()將執行LoadModel()方法,因此我不會在此處再次粘貼您的LoadModel()方法,但是在您的LoadModel方法中,您將清除Items並重新加載Items。 這就是為什么我說您可能已刷新列表的原因。

因此,也許您可​​以嘗試:

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

當選擇一項時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM