Xamarin:从ObservableCollection更新UI(OnPropertyChange()命中,未显示列表更新)

这是我的第一篇文章,所以请耐心等待。

我正在使用Xamarin表单。

我正在尝试更新购物车样式ObservableCollection。我的XAML文件具有一个按钮,该按钮在以下代码中执行命令“ AddCommand”。我知道这行得通,因为Basket ObservableCollection更新(获取对象后与DisplayAlert进行了检查)。我知道OnPropertyChanged()被调用是因为我在其中放置了一个断点并对其进行了标记。

我的问题是,添加后UI不会更新。如果我添加对象时以这些负载开始,则仅显示使用AddToBasket函数添加的对象。

BasketViewModel.cs:

namespace SacredGrounds.ViewModel
{
    public class BasketViewModel : ViewModelBase
    {
        ObservableCollection<BasketItem> _Basket;

        public ObservableCollection<BasketItem> Basket
        {
        get { return _Basket; }
        set
        {
            _Basket = value;
            OnPropertyChanged();
        }
    }

    public BasketViewModel()
    {
        Basket = new ObservableCollection<BasketItem>();
    }



    public ICommand AddCommand => new Command(AddToBasket);

    private async void AddToBasket()
    {
        Basket.Add(new BasketItem { BasketItemType = BasketItemType.Drink,ProductName = "Test",ProductImage = "coffeeBeans.png",UnitPrice = 2,Quantity = 1 });
        await NavigationService.Instance.SwitchToDrinks();
    }
}

ViewModelBase.cs

    using System.Threading.Tasks;
    using Xamarin.Forms;

    namespace SacredGrounds.ViewModel.Base
    {
        public class ViewModelBase : BindableObject
        {
            public virtual Task InitializeAsync(object navigationData) => Task.FromResult(false);
        } 
    }

CartPopupView.Xaml的相关部分

     </pancake:PancakeView>
        <Grid
            Grid.Row="1"
            BackgroundColor="{StaticResource GreenColor}">
            <Grid.RowDefinitions>
                <RowDefinition Height="250" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <!-- BASKET ITEMS -->
            <ListView
                x:Name="listView1"
                Grid.Row="0"
                ItemsSource="{Binding Basket}"
                ItemTemplate="{StaticResource BasketItemDataTemplateSelector}"
                HasUnevenRows="True"
                SeparatorVisibility="Default"
                Selectionmode="None"
                ItemTapped="RemoveItem"
                Margin="0,6"/>

CartPopupView.Xaml.cs的相关部分

    namespace SacredGrounds.Views
    {
        public partial class CartPopupView : ContentView
        {
            public delegate void TapDelegate();

            public CartPopupView ()
            {
                InitializeComponent ();
                GoToState("Collapsed");
            }

有人可以建议我为什么我的UI没有从此代码更新吗?

编辑: 感谢Jason为实现我的错误提供的帮助。

我正在为每个页面创建一个类BasketViewModel的新实例,因此,根据所访问的实例,Observable集合中的项目明显不同。我处理此问题的方法是添加一个在页面之间传递的静态实例。

BasketViewModel.cs

    namespace SacredGrounds.ViewModel
    {
        public class BasketViewModel : ViewModelBase
        {

            public static BasketViewModel _instance;

            public static BasketViewModel Instance
            {
                get
                {
                    if (_instance == null)
                        _instance = new BasketViewModel();

                    return _instance;
                }
            }

            ObservableCollection<BasketItem> _Basket;

            public ObservableCollection<BasketItem> Basket
            {
                get { return _Basket; }
                set
                {
                    _Basket = value;
                    OnPropertyChanged();
                }
            }

            public BasketViewModel()
            {
                Basket = new ObservableCollection<BasketItem>();
            }
fluid120 回答:Xamarin:从ObservableCollection更新UI(OnPropertyChange()命中,未显示列表更新)

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2793772.html

大家都在问