2017-09-01 60 views
1

我在連續兩次選擇列表視圖項目時遇到問題。所以當我選擇一個項目時,它會加載另一個列表。這不是問題,但是當我點擊返回到前一個列表視圖時,我不再能夠單擊相同的列表視圖項目。 我已經做了一些閱讀,似乎有一個'取消'在代碼中的某個點的列表視圖項目的想法,所以能夠再次選擇相同的項目。 選擇是使用MVVM模式,使處理選擇等無法選擇列表視圖項目兩次

// bound to list items on front end, reacts to tap on each item 
// and loads route information for the route that is selected 

    RouteInfo _selected_item; 
    public RouteInfo RouteLabelSelected 
    { 
     get { return _selected_item; } 
     set 
     { 
      if (Equals(value, _selected_item)) return; 
      _selected_item = value; 
      OnPropertyChanged(nameof(RouteLabelSelected)); 
      OpenRoutePage(_selected_item.ID); 

     } 

    } 

的OpenRoutePage方法簡單地打開下一個列表視圖代碼完成,因爲我說這工作得很好。 我附上了一些圖片以更好地說明問題。

enter image description here

enter image description here

enter image description here

任何幫助,將不勝感激,原諒藝術品。

回答

3

在ItemSelected事件處理程序,你需要設置的SelectedItem = NULL

protected void ItemSelected(object source, ItemSelectedEventArgs args) { 

    // do whatever actions on selected item here 

    // then reset SelectedItem 
    ((ListView)source).SelectedItem = null; 
} 
+0

這是如何適應MVVM的?這些操作綁定到視圖模型。那麼,我會如何將這個與我發佈的代碼片段相適應呢? – user3355961

+0

你如何將你的ItemSelected事件連接起來?或者,您可以在OnAppearing觸發時重置SelectedItem。 – Jason

+0

所選項目通過xaml中的綁定進行連線,與我發佈的代碼片段「說話」。 至於OnAppearing方法,我嘗試過,但是當試圖導航回第一個列表視圖時,它會拋出一個空對象異常。 – user3355961

1

您可以創建不同的事件處理程序來解決這個問題,即ItemTapped和ItemSelected事件處理程序。 ItemSelected事件首先被點擊/點擊觸發,然後觸發ItemTapped事件。在第一次點擊/點擊列表視圖項目時,觸發ItemSelected事件後觸發兩次ItemTapped事件。爲了克服這個問題,你可以附加兩個事件處理程序,並簡單地設置/清除布爾屬性。

實施例:

private bool _isSelected; 

private void ListView_ItemSelected(object sender, SelectedItemChangedEventArgs e) 
{ 
    _isSelected = true; 
} 

private void ListView_ItemTapped(object sender, ItemTappedEventArgs e) 
{ 
    if(!_isSelected) 
    { 
     //do work here 
    } 
    _isSelected = false; 
} 

在此,首先將ItemSelected事件被觸發,並且可變_isSelected被設置。然後ItemTapped事件被觸發兩次。 ItemTapped事件中的條件阻止用戶代碼在第一次調用中執行,然後在第二次調用中允許代碼執行。

相關問題