0

在用 C# 和 Xamarin Forms 编写的程序中(但这个问题更多地基于 MVVM),我有一个 ObservableCollection 项目:

        ObserbableCollection<Item> Items { get; set; }

当此集合更改时(向集合添加或删除项目),我需要通知其他属性和命令,因为它们都绑定到 XAML 屏幕上的控件(主要是按钮和标签)。

我找到的唯一解决方案是这样的:

        Items.CollectionChanged += (sender, args) =>
        {
            ((Command)OnHoldCommand).ChangeCanExecute();
            ((Command)CancelSaleCommand).ChangeCanExecute();
            ((Command)ValidateTakeAwayCommand).ChangeCanExecute();
            ((Command)ValidateEatInCommand).ChangeCanExecute();
            RaisePropertyChanged(() => TotalItems);
            RaisePropertyChanged(() => TotalAmount);
        };

您认为还有其他解决方案吗?也许使用 Fody.PropertyChanged?

我使用 FreshMvvm 作为 Xamarin Forms 之上的 Mvvm 框架。

4

1 回答 1

1

您的 ViewModel 通常会实现INotifyPropertyChanged接口。如果是这样,那么您可以订阅PropertyChanged事件并监听集合的更改,就像视图一样。在事件处理程序中,如有必要,可以通知其他属性。

另一种更直接的方法是,当您的 ViewModel 可以控制插入/更改时,您可以在插入新项目时直接通知其他属性(调用NotifyPropertyChanged()方法)。

于 2017-09-06T11:36:15.290 回答