Издеваться над программой базы данных с DynamicData и RX.net. Это неправильное использование?C#

Место общения программистов C#
Ответить
Anonymous
 Издеваться над программой базы данных с DynamicData и RX.net. Это неправильное использование?

Сообщение Anonymous »

Я написал тестовую программу, чтобы узнать DynamicData < /code> и rx.net.
Framework - Avalonia.
У меня есть прошивка сущности и репозиторий с асинхронным < / / Код> Функция, которая загружает данные и может занять много времени: < /p>

Код: Выделить всё

namespace DynamicDataWithGui.Models;

public class Firmware
{
public Guid Id { get; set; }
public string Name { get; set; }
}

public class Repository
{
private readonly CompositeDisposable _subscription = new();
private ISourceCache _internalCache;

public IObservableCache LoadInitialData()
{
return ObservableChangeSet.Create(cache =>
{
var d = GetListAsync()
.ToObservable()
.Select(l =>
{
cache.Edit(edit => edit.AddOrUpdate(l));
_internalCache = cache;
return l;
})
.Subscribe()
.DisposeWith(_subscription);

return d;
}, t => t.Id)
.AsObservableCache();
}

private async Task GetListAsync()
{
var result = new List();
for (int i = 0; i < 10; i++)
{
result.Add(new Firmware { Id = Guid.NewGuid(), Name = $"Firmware {i + 1}" });
}

await Task.Delay(5000);

return result;
}
}
Затем я представляю объект прошивки в детстве в статье vistewmodel like so:

Код: Выделить всё

namespace DynamicDataWithGui.ViewModels;

public class FirmwareViewModel: ViewModelBase
{
[Reactive] public string Id { get; set; }
[Reactive] public string Name { get; set; }

public FirmwareViewModel(Firmware firmware)
{
Id = firmware.Id.ToString();
Name = firmware.Name;

}
}

public class ArticleViewModel: ViewModelBase
{
private readonly CompositeDisposable _disposables = new();
[Reactive] public string Name { get; set; }
[Reactive] public bool IsLoading { get; set; }

public ObservableCollectionExtended FirmwareChildren { get; private set; } = new();

public ArticleViewModel()
{
var repository = new Repository();
var dummyFirmwareViewModel =
new FirmwareViewModel( new Firmware{ Id = Guid.Empty, Name = string.Empty });

FirmwareChildren.Add(dummyFirmwareViewModel);

this.WhenAnyValue(vm => vm.IsExpanded)
.Where(isExpanded => isExpanded)
.Select(b =>
{
if (FirmwareChildren.Contains(dummyFirmwareViewModel))
{
IsLoading = true;
FirmwareChildren.Remove(dummyFirmwareViewModel);

repository.LoadInitialData()
.Connect()
.Transform(firmware => new FirmwareViewModel(firmware))
.ObserveOn(RxApp.MainThreadScheduler)
.Bind(FirmwareChildren)
.LastAsync(_ => IsLoading = false)
.Subscribe()
.DisposeWith(_disposables);
}
else
{
FirmwareChildren.Remove(dummyFirmwareViewModel);
}

return b;
})
.Subscribe()
.DisposeWith(_disposables);
}
}
В графическом интерфейсе я связываю свойства ViewModels с Treeview . Все работает до сих пор.
Но я думаю, что я допустил ошибки, особенно в функции LoadInitialData < /code> и мониторинг свойства IseSped. Правильное направление.


Подробнее здесь: https://stackoverflow.com/questions/794 ... -wrong-use
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»