0

DDD の原則を使用して小さな MVVM アプリケーションを構築しています。私の ViewModel では、イベントが発生するたびにいくつかのプロパティを更新する必要があります。ViewModel はプロパティを更新しますが、これらの変更は UI に反映されません。

これが私の(簡略化された)ViewModelです:

public class DashboardViewModel : ReactiveObject, IAsyncHandle<RaceCreatedEvent>
{
    private readonly IQueryHandler<Query.Races.RaceQuery, Query.Races.Race?> raceQueryHandler;

    public DashboardViewModel(IQueryHandler<Query.Races.RaceQuery, Query.Races.Race?> raceQueryHandler)
    {
        this.raceQueryHandler = raceQueryHandler;

        // Here the method updates the properties & UI is updated
        SetRaceProperties();
    }

    [Reactive]
    public string NumberOfRaces { get; set; }

    [Reactive]
    public string NumberOfFinishedRaces { get; set; }

    [Reactive]
    public string NumberOfPendingRaces { get; set; }

    // Whenever a 'RaceCreatedEvent' has fired, this method is executed
    public async Task HandleAsync(RaceCreatedEvent domainEvent)
    {
        // Here the method updates the properties, but the UI is NOT updated
        await SetRaceProperties();
    }

    private async Task SetRaceProperties()
    {
        var data = await raceQueryHandler.HandleMultipleAsync(null);

        this.NumberOfRaces = $"{data.Count()} aangemaakte races";
        this.NumberOfPendingRaces = $"{data.Where(r => r != null && !r.Finished && !r.Started).Count()} races in afwachting";
        this.NumberOfFinishedRaces = $"{data.Where(r => r != null && r.Finished).Count()} afgelopen races";
    }
}

コンストラクターから呼び出されるとSetRaceProperties、プロパティと UI が更新されます。SetRacePropertiesメソッドがイベント ハンドラーから起動されるたびに、プロパティは更新されますが、UI は更新されません。

これが私のビューバインディングです:

<TextBlock Margin="5,0,5,0" HorizontalAlignment="Left" Grid.Row="0" Grid.Column="1" Classes="Body1" Text="{Binding NumberOfRaces}" />
<TextBlock Margin="5,0,5,0" HorizontalAlignment="Left" Grid.Row="1" Grid.Column="1" Classes="Body1" Text="{Binding NumberOfPendingRaces}" />
<TextBlock Margin="5,0,5,0" HorizontalAlignment="Left" Grid.Row="2" Grid.Column="1" Classes="Body1" Text="{Binding NumberOfFinishedRaces}" />

ここで何か間違ったことをしていますか?

前もって感謝します!

4

1 に答える 1