【问题标题】:Cannot Select List View Item Twice无法选择列表视图项目两次
【发布时间】:2018-02-10 17:08:07
【问题描述】:

我在连续两次选择列表视图项目时遇到问题。因此,当我选择一个项目时,它会加载另一个列表。这不是问题,但是当我单击返回以返回上一个列表视图时,我不再能够单击相同的列表视图项。 我已经阅读了一些内容,似乎有一个想法是在代码中的某个位置“取消选择”列表视图项目,以便能够再次选择相同的项目。 选择是使用 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 方法只是打开下一个列表视图,正如我所说的,这很好用。 我附上了一些图片以更好地说明问题。

任何帮助将不胜感激,请原谅艺术品。

【问题讨论】:

    标签: c# xaml xamarin mvvm xamarin.forms


    【解决方案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 事件中的条件阻止用户代码在第一次调用中执行,然后允许代码在第二次调用中执行。

    【讨论】:

      【解决方案2】:

      在您的 ItemSelected 事件处理程序中,您需要设置 SelectedItem = null

      protected void ItemSelected(object source, ItemSelectedEventArgs args) {
      
        // do whatever actions on selected item here
      
        // then reset SelectedItem
        ((ListView)source).SelectedItem = null;
      }
      

      【讨论】:

      • 这与 MVVM 有什么关系?动作绑定到视图模型。那么,我如何将它与我发布的代码 sn-p 相匹配?
      • 你的 ItemSelected 事件是如何连接起来的?或者,您可以在 OnAppearing 触发时重置 SelectedItem。
      • 所选择的项目是通过 xaml 中的绑定连接的,该绑定与我发布的代码 sn-p “说话”。至于 OnAppearing 方法,我尝试过,但是当尝试导航回第一个列表视图时,它会引发空对象异常。
      • 我认为唯一的方法是从代码后面。这正是 Xamarin 文档 developer.xamarin.com/guides/xamarin-forms/user-interface/… 中显示的方式
      • 或者尝试使用 ItemTapped 事件,即使之前选择了该项目,它也会触发。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多