.NET MAUI reactiveUi: JobStatemanager mit beobachtbarer <bool> Updates, die nicht von ViewModel empfangen werden, rechtzC#

Ein Treffpunkt für C#-Programmierer
Guest
 .NET MAUI reactiveUi: JobStatemanager mit beobachtbarer <bool> Updates, die nicht von ViewModel empfangen werden, rechtz

Post by Guest »

Projekt: .NET 9 MAUI
Paket: reactiveUi.maui, reactiveUi.fody, Shiny.jobs, Shiny.hosting.maui < /p>
Ich habe einen Vordergrundjob, das Als Singleton läuft regelmäßig ein Singleton von iCloudtodevicestatemanager, der einige gemeinsame Immobilien für andere Dienste zur Beobachtung unterhält. In diesem Fall, wenn der Job ausgeführt wird oder nicht. Ich gehe davon aus, dass die ViewModel Isrunning -Immobilie auf jeder Änderung aktualisiert wird, damit ich auf der Seite einen Aktivitätsindikator anzeigen kann, auf dem der Job ausgeführt wird. Aber immer nur den Wert des Jobabschlusses erhalten.

Code: Select all

public class CloudToDeviceStateManager : ReactiveObject
{
private readonly BehaviorSubject _isRunningSubject = new BehaviorSubject(false);
public IObservable IsRunningTicks => _isRunningSubject.AsObservable();

public bool IsRunning
{
get => _isRunningSubject.Value;
private set
{
_isRunningSubject.OnNext(value);
this.RaisePropertyChanged();
}
}

public void SetIsRunning(bool isRunning)
{
IsRunning = isRunning;
}
}

public partial class CloudToDeviceSyncJob : IJob
{
private readonly ICloudToDeviceStateManager _stateManager;

[ObservableAsProperty] public bool IsRunning { get; }

public CloudToDeviceSyncJob(ICloudToDeviceStateManager stateManager)
{
_stateManager = stateManager;
}

protected override async Task Run(CancellationToken cancelToken)
{
try
{
_stateManager.SetIsRunning(true);
cancelToken.ThrowIfCancellationRequested();
//... some logic here
}catch(Exception ex) {}
finally
{
_stateManager.SetIsRunning(false);
_logger.LogInformation("CloudToDeviceSyncJob finished");
}
}
}
< /code>
Ich habe diesen Statemanager in einen ViewModel < /p>
injiziert.
public class MainPageViewModel : ViewModelBase
{
private readonly ICloudToDeviceStateManager _stateManager;

[Reactive] public bool IsRunning { get; set; }

public MainPageViewModel(ICloudToDeviceStateManager stateManager)
{
_stateManager = stateManager;

// tried this..
this.WhenAnyValue(x => x._stateManager.IsRunning)
.ObserveOn(RxApp.MainThreadScheduler)
.BindTo(this, x => x.IsRunning);

// tried this
_stateManager.IsRunningTicks.Subscribe(x => IsRunning = x);
}
}
Wenn der Job ausgeführt wird, aktualisiert der _Statemanager.setIsRunning (true) das Statemanager, das Ansichtsmodell erhält diesen Wert nicht. Es empfängt immer nur den falschen Setter. Ich bin mir nicht sicher, was das Ansichtsmodell daran hindert, die wahre Aussage zu empfangen.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post