Xamarin表单 - 对ObservableCollection的更改不会更新View

时间:2017-06-23 15:06:50

标签: xaml xamarin xamarin.forms

我有一个ViewModel,当执行Command时,从服务获取项目并将这些项目添加到ObservableCollection。 ObservableCollection绑定到ListView。

我的问题是向ObservableCollection添加项不会自动更新View - ListView保持为空。如果我打电话给geom_line(aes(y=foo , colour='green'), show.legend = F),那么ListView 会被更新 - 但是ObservableCollection不应该提出这个吗?

我正在使用最新的Xamarin.Forms(2.3.4.247)。此问题仅影响Android - 如果我在iOS上运行它可以正常工作。

实现OnPropertyChanged(nameof(ItemList))的ViewModel:

INotifyPropertyChanged

Item ViewModel(也实现public class ListViewModel : ViewModelBase { private readonly IService m_Service; public ListViewModel(IService service) { m_Service = service; ItemList = new ObservableCollection<Item>(); RefreshCommand = new Command(async () => await RefreshData()); } public ICommand RefreshCommand {get;set;} public ObservableCollection<Item> ItemList { get; private set; } private async Task RefreshData() { ItemList.Clear(); var newItems = await m_Service.GetItems(); if(newItems != null) { foreach(var n in newItems) { ItemList.Add(new ItemViewModel() { Title = n.Title }); } } }

INotifyPropertyChanged)

&#39;列表&#39;视图:

public class ItemViewModel : ViewModelBase
{
    private string m_JobTitle;

    public ItemViewModel()
    {
    } 

    public string Title
    {
        get { return m_Title; }
        set
        {
            m_Title = value;
            OnPropertyChanged(nameof(Title));
        }
    }        
}

&#39;项目&#39;视图:

<ContentView xmlns="http://xamarin.com/schemas/2014/forms" 
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:ui="clr-namespace:Test.Mobile.UI;assembly=Test.Mobile.UI"
         x:Class="Test.Mobile.UI.MyListView">
  <ContentView.Content>
        <StackLayout Orientation="Vertical">      
            <ListView ItemsSource="{Binding ItemList}">
                <ListView.ItemTemplate>
              <DataTemplate>
                  <ViewCell>
                      <ui:ItemView></ui:ItemView>
                  </ViewCell>
                </DataTemplate>
          </ListView.ItemTemplate>
        </ListView>
  </StackLayout>
  </ContentView.Content>
</ContentView>

1 个答案:

答案 0 :(得分:1)

您使用的是什么版本的Xamarin表单?

  • 将您的项目更新到最新版本
  • 如果您仍然遇到此问题,请在添加所有元素后尝试以下操作: ItemList = new ObservableCollection(newItems);
  • 如果这不起作用,可能是ViewModelBase中的问题。 对于Handle PropertyChanged,我使用这个漂亮的包 https://github.com/Fody/PropertyChanged