Как отключить кнопку WinForms, если SourceList пуст - PullRequest
0 голосов
/ 25 декабря 2018

Я использовал ReactiveUI с WinForms и просто переключился на DynamicData, используя SourceList вместо ReactiveBindingList.

В соответствии с этой проблемой добавлена ​​поддержка WinForms IBindingList Collection.

У меня есть список, который я привязываю к списку строк.Чтобы заставить его работать с WinForms, я создал BindingList, который подключен к SourceList:

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 пуст?

1 Ответ

0 голосов
/ 20 января 2019

Необходимо создать 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;
}

Единственным недостатком является то, что у меня теперь есть три списка, но это работает.

...