更新ObservableCollection后,Xamarin.Forms ListView发送空事件

时间:2018-06-14 06:16:35

标签: c# listview xamarin xamarin.forms

由于以下方法似乎不起作用,我可能会错过更新Xamarin.Forms ListView的核心概念。也许你可以提供帮助,如何正确地完成它。

我在Xamarin.Forms页面中遇到以下情况: 一个ListView就像在页面上那样:

<ListView x:Name="listView" Margin="0" ItemSelected="OnListItemSelected" ItemsSource="{Binding Items}">
    <ListView.ItemTemplate>
        ...
    </ListView.ItemTemplate>
</ListView>

此ListView的绑定连接到ViewModel中的项目,看起来基本如下:

private ObservableCollection<Item> items = new ObservableCollection<Item>();
public ObservableCollection<Item> Items
{
    get
    {
        items.Clear();
        if (SomeSingeltonSource != null)
        {
            IEnumerable<Item> current = SomeSingeltonSource.GetCurrentItems(viewModelState);
            foreach (Item wf in current)
            {
                items.Add(wf);
            }
        }
        return items;
    }
}

调用ItemSelected的方法如下所示:

void OnListItemSelected(object sender, SelectedItemChangedEventArgs e)
{
    if (e.SelectedItem is Item selectedItem)
    {
    ...
    }
}

现在在第一次绑定之后,一切正常。 但是如果Items更改List仍然正确更新,但是如果我在列表中选择一个Item,仍会调用OnListItemSelected方法,但是e.SelectedItem始终为null。

一切正常,直到Xamarin.Forms 3.0.0 Service Release 1,但自Service Release 2以来它已不再适用。

我是否会错过更新ListView的重要概念,还是有其他方法以错误的方式实现?

2 个答案:

答案 0 :(得分:0)

通常,当我Binding使用ItemsSource时,我也会Binding使用SelectedItem。 这样你就不需要任何方法/事件连接。

因此,在您的示例中,请在您的视图中执行此操作:

<ListView x:Name="listView" Margin="0" SelectedItem="{Binding SelectedItem}" ItemsSource="{Binding Items}">
    <ListView.ItemTemplate>
        ...
    </ListView.ItemTemplate>
</ListView>

在绑定上下文代码中添加一个额外的属性,如:

private Item _selectedItem;
public Item SelectedItem
{
    get { return _selectedItem; }
    set
    {
        _selectedItem = value; // TODO: Add extra code to trigger something because the user selected an item
        OnNotifyPropertyChanged();
    }
}

答案 1 :(得分:0)

最后,事实证明这是Xamarin.Forms中的错误,已在3.1.0版中解决。

如果您对详细信息感兴趣,请查看以下问题:

  • [UWP] Xamarin表单列表视图SelectedItem绑定到UWP(#3017)中的ObservableCollection时不起作用
  • [UWP] Xamarin.Forms 3.1 UWP的ListView ItemTapped事件问题。 (#2996
相关问题