根据 ObservableCollection 中项目的 属性 使用 CanExecute 创建命令
Create Command with CanExecute based on the Property of an item in an ObservableCollection
我有一个 属性 类型为 ObservableCollection<T>
的 ViewModel,名为 Items
,其中 T
是一个 class,其中包含一个 属性调用类型 bool
的 IsSelected
,它在值更改时引发 PropertyChanged
事件。
我有一个绑定到 Command
的 Button
,如果 Items'
[=15= 中的至少一个,我希望启用 Button
] 属性 是 true
,否则禁用。
我正在尝试使用 ReactiveUI 中的 ReactiveCommand
来执行此操作,因此它看起来像这样:
this.SubmitCommand = ReactiveCommand.CreateFromTask(SubmitItems,
this.WhenAnyValue(x => x.Items).Select(x => x.Any(i => i.IsSelected));
但这似乎不起作用,我想那是因为 Subscription
没有监控 Item
的 IsSelected
属性 所以当 Item
被选中,Subscription
没有通知。
无论如何,任何帮助将不胜感激。
我觉得这个 ReactiveUI 的东西真的很酷,我正在努力学习它。
我会使用 DynamicData。
var canExecute = Items.ToObservableChangeSet()
.AutoRefreshOnObservable(
x => x.WhenAnyValue(item => item.IsSelected))
.ToCollection()
.Select(x => x.Any(item => item.IsSelected));
我有一个 属性 类型为 ObservableCollection<T>
的 ViewModel,名为 Items
,其中 T
是一个 class,其中包含一个 属性调用类型 bool
的 IsSelected
,它在值更改时引发 PropertyChanged
事件。
我有一个绑定到 Command
的 Button
,如果 Items'
[=15= 中的至少一个,我希望启用 Button
] 属性 是 true
,否则禁用。
我正在尝试使用 ReactiveUI 中的 ReactiveCommand
来执行此操作,因此它看起来像这样:
this.SubmitCommand = ReactiveCommand.CreateFromTask(SubmitItems,
this.WhenAnyValue(x => x.Items).Select(x => x.Any(i => i.IsSelected));
但这似乎不起作用,我想那是因为 Subscription
没有监控 Item
的 IsSelected
属性 所以当 Item
被选中,Subscription
没有通知。
无论如何,任何帮助将不胜感激。
我觉得这个 ReactiveUI 的东西真的很酷,我正在努力学习它。
我会使用 DynamicData。
var canExecute = Items.ToObservableChangeSet()
.AutoRefreshOnObservable(
x => x.WhenAnyValue(item => item.IsSelected))
.ToCollection()
.Select(x => x.Any(item => item.IsSelected));