我正在使用 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}" />
我在这里做错了吗?
提前致谢!