gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:59:23 25 4
gpt4 key购买 nike

我有一个 ViewModel,当执行命令时,它会从服务中获取项目并将这些项目添加到 ObservableCollection。
ObservableCollection 绑定(bind)到 ListView。

我的问题是向 ObservableCollection 添加项目不会自动更新 View - ListView 保持为空。如果我调用 OnPropertyChanged(nameof(ItemList))然后 ListView 被更新 - 但 ObservableCollection 不应该照顾提出这个问题吗?

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

实现 INotifyPropertyChanged 的 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 });
}
}
}

Item ViewModel(也实现了 INotifyPropertyChanged) :
public class ItemViewModel : ViewModelBase
{
private string m_JobTitle;

public ItemViewModel()
{
}

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

“列表” View :
<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>

“项目” View :
<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:enums="clr-namespace:Test.Mobile.Models.Enums;assembly=Test.Mobile.Models"
x:Class="Test.Mobile.UI.JobItemView">
<ContentView.Content>
<Label Text={Binding Title}/>
</ContentView.Content>
</ContentView>

最佳答案

您使用的是哪个版本的 Xamarin Forms?

  • 将您的项目更新到最新版本
  • 如果您仍然遇到问题,请在添加所有元素后尝试以下操作:
    ItemList = new ObservableCollection(newItems);
  • 如果这不起作用,则可能是您的 ViewModelBase 中的问题。
    对于 Handle PropertyChanged 我使用这个不错的包
    https://github.com/Fody/PropertyChanged
  • 关于xaml - Xamarin 表单 - 对 ObservableCollection 的更改不会更新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44724666/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com