在用C#编写和Xamarin形式的程序(但这个问题更多的是基于MVVM)如何通知其他属性和命令,我有一个项目一个ObservableCollection:使用MVVM,当集合被修改
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框架。
告诉我,请你试着完成什么?为什么你需要按钮和标签监听收藏改变? –
@YehorHromadskyi由于屏幕上的某些标签显示了更新项目列表时计算的信息。有些按钮被命令禁用(使用CanExecute功能)。这些CanExecute功能还依赖于项目列表的内容。 – hugoterelle
您当前的方法是我知道的唯一选项,无需创建将依赖对象连接在一起的某种“更改级联”框架。 –