Я работаю над небольшой программой, в которой я оцениваю, является ли реактивный интерфейс подходящей основой для другого проекта. Пока все хорошо ... На данный момент я немного потерян в функции, связанной с DynamicData. Я пытаюсь выполнить команду в MainViewWindow каждый раз, когда поле со списком в ReactiveUserControl изменяется. Все мои модели расширяют ReactiveObject, а свойства настраиваются с помощью установщика RaiseAndSetIfChanged.
В моей ReactiveUserControl ViewModel я вызываю мою команду SaveImage из ReactiveUserControl ViewModel, как описано здесь:
https://reactiveui.net/docs/handbook/message-bus/#ways-to-avoid-using-messagebus
Определение ObservableCollection
public ObservableCollection<FileViewModel> VisibleFiles { get; protected set; }
Инициализировать коллекцию, файлы - это SourceList
WatchFiles = ReactiveCommand.Create(() =>
{
VisibleFiles = new ObservableCollection<FilesViewModel>(Files.Items);
VisibleFiles.ToObservableChangeSet().AutoRefreshOnObservable(doc => doc.SaveImage).Select(_ => WhenAnyFileChanged()).Switch().Subscribe<FilesViewModel>(x => {
Console.WriteLine("HOORAY");
});
});
private IObservable<FilesViewModel> WhenAnyFileChanged()
{
return VisibleFiles.Select(x => x.SaveFile.Select(_ => x )).Merge();
}
При первом изменении поля со списком оно оценивается правильно. Я получаю «Ура». Но каждый раз после этого нет выхода. Если я снова вызову команду Watch Files, она снова будет работать один раз.
Почему это происходит, и как я могу решить, чтобы распечатать каждый раз, когда файл изменил «Ура»? Я вижу, что ObservableCollection обнаруживает изменение, а также команда в ReactiveUserControl вызывается при изменении. Но метод WhenAnyFileChanged не возвращает измененный элемент после первого вызова.
Надеюсь, понятно, чего я пытаюсь достичь, в чем проблема.
Обновление: я не знаю почему, но если я проверяю ChangeSet в Select (), я получаю TotalChanges 10 при инициализации, и это правильно. Тогда с моим первым рабочим изменением TotalChanges равно 0, но оценивается правильно. На моей следующей попытке изменить я все еще получаю 0 TotalChanges, но также нет правильной оценки в WhenAnyFileChanged ().
Refreshes () равен 1 при каждом изменении.
Обновление 2: изменение AutoRefreshOnObservable () на AutoRefresh () приносит желаемую функциональность.