我有一个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>
答案 0 :(得分:1)
您使用的是什么版本的Xamarin表单?