如果 SourceList 为空,如何禁用 WinForms 按钮
How to disable WinForms button if SourceList is empty
我一直在将 ReactiveUI 与 WinForms 一起使用,只是切换到 DynamicData,使用 SourceList 而不是 ReactiveBindingList。
根据 this issue,添加了 WinForms IBindingList 集合支持。
我有一个绑定到字符串列表的列表框。为了使其与 WinForms 一起使用,我创建了一个连接到 SourceList 的 BindingList:
var Images = new SourceList<string>();
var ImagesBindableWinForms = new BindingList<string>();
Images.Connect().Bind(ImagesBindableWinForms).Subscribe();
然后将 BindingList 绑定到列表框,效果很好:
d(this.Bind(ViewModel, x => x.AdInfo.ImagesBindableWinForms, x => x.listImages.DataSource));
有一个按钮可以从列表中删除项目。如果列表为空,则应将其禁用。在切换到 SourceList 之前,这曾经有效:
ViewModel.DeleteImageCmd = ReactiveCommand.Create(DeleteImage, ViewModel.CanDeleteImage());
public IObservable<bool> CanDeleteImage()
{
var canDeleteImage = this.WhenAnyValue(vm => vm.AdInfo.Images.Count)
.Select(x => x > 0);
return canDeleteImage;
}
代码将根据列表计数启用或禁用按钮。
相同的代码不再有效。我想更新计数时不会触发任何事件。
如果 SourceList 为空,我该如何禁用按钮?
有必要创建一个 ObservableCollectionExtended 并将其绑定到 SourceList。 CanDeleteImage 应该使用它而不是 SourceList 或 BindingList:
var ImagesBindable = new ObservableCollectionExtended<string>();
Images.Connect().Bind(ImagesBindable).Subscribe();
public IObservable<bool> CanDeleteImage()
{
var canDeleteImage = this.WhenAnyValue(vm => vm.AdInfo.ImagesBindable.Count)
.Select(x => x > 0);
return canDeleteImage;
}
唯一的缺点是我现在有三个列表,但它有效。
我一直在将 ReactiveUI 与 WinForms 一起使用,只是切换到 DynamicData,使用 SourceList 而不是 ReactiveBindingList。
根据 this issue,添加了 WinForms IBindingList 集合支持。
我有一个绑定到字符串列表的列表框。为了使其与 WinForms 一起使用,我创建了一个连接到 SourceList 的 BindingList:
var Images = new SourceList<string>();
var ImagesBindableWinForms = new BindingList<string>();
Images.Connect().Bind(ImagesBindableWinForms).Subscribe();
然后将 BindingList 绑定到列表框,效果很好:
d(this.Bind(ViewModel, x => x.AdInfo.ImagesBindableWinForms, x => x.listImages.DataSource));
有一个按钮可以从列表中删除项目。如果列表为空,则应将其禁用。在切换到 SourceList 之前,这曾经有效:
ViewModel.DeleteImageCmd = ReactiveCommand.Create(DeleteImage, ViewModel.CanDeleteImage());
public IObservable<bool> CanDeleteImage()
{
var canDeleteImage = this.WhenAnyValue(vm => vm.AdInfo.Images.Count)
.Select(x => x > 0);
return canDeleteImage;
}
代码将根据列表计数启用或禁用按钮。
相同的代码不再有效。我想更新计数时不会触发任何事件。
如果 SourceList 为空,我该如何禁用按钮?
有必要创建一个 ObservableCollectionExtended 并将其绑定到 SourceList。 CanDeleteImage 应该使用它而不是 SourceList 或 BindingList:
var ImagesBindable = new ObservableCollectionExtended<string>();
Images.Connect().Bind(ImagesBindable).Subscribe();
public IObservable<bool> CanDeleteImage()
{
var canDeleteImage = this.WhenAnyValue(vm => vm.AdInfo.ImagesBindable.Count)
.Select(x => x > 0);
return canDeleteImage;
}
唯一的缺点是我现在有三个列表,但它有效。