protected override void LoadComplete() { base.LoadComplete(); SelectedItem.BindValueChanged(selected => { bool isCurrent = selected.NewValue == Model; if (!valid.Value) { // Don't allow selection when not valid. if (isCurrent) { SelectedItem.Value = selected.OldValue; } // Don't update border when not valid (the border is displaying this fact). return; } maskingContainer.BorderThickness = isCurrent ? 5 : 0; }, true); beatmap.BindValueChanged(_ => Scheduler.AddOnce(refresh)); ruleset.BindValueChanged(_ => Scheduler.AddOnce(refresh)); valid.BindValueChanged(_ => Scheduler.AddOnce(refresh)); requiredMods.CollectionChanged += (_, __) => Scheduler.AddOnce(refresh); onScreenLoader.DelayedLoadStarted += _ => { Task.Run(async() => { try { if (showItemOwner) { var foundUser = await userLookupCache.GetUserAsync(Item.OwnerID).ConfigureAwait(false); Schedule(() => ownerAvatar.User = foundUser); } if (Item.Beatmap.Value == null) { var foundBeatmap = await beatmapLookupCache.GetBeatmapAsync(Item.BeatmapID).ConfigureAwait(false); Schedule(() => Item.Beatmap.Value = foundBeatmap); } } catch (Exception e) { Logger.Log($"Error while populating playlist item {e}"); } }); }; refresh(); }
protected override void LoadComplete() { base.LoadComplete(); SelectedItem.BindValueChanged(selected => { bool isCurrent = selected.NewValue == Model; if (!valid.Value) { // Don't allow selection when not valid. if (isCurrent) { SelectedItem.Value = selected.OldValue; } // Don't update border when not valid (the border is displaying this fact). return; } maskingContainer.BorderThickness = isCurrent ? 5 : 0; }, true); beatmap.BindValueChanged(_ => Scheduler.AddOnce(refresh)); ruleset.BindValueChanged(_ => Scheduler.AddOnce(refresh)); valid.BindValueChanged(_ => Scheduler.AddOnce(refresh)); requiredMods.CollectionChanged += (_, __) => Scheduler.AddOnce(refresh); onScreenLoader.DelayedLoadStarted += _ => { Task.Run(async() => { try { if (showItemOwner) { var foundUser = await userLookupCache.GetUserAsync(Item.OwnerID).ConfigureAwait(false); Schedule(() => ownerAvatar.User = foundUser); } if (Item.Beatmap.Value == null) { IBeatmapInfo foundBeatmap; if (multiplayerClient != null) { // This call can eventually go away (and use the else case below). // Currently required only due to the method being overridden to provide special behaviour in tests. foundBeatmap = await multiplayerClient.GetAPIBeatmap(Item.BeatmapID).ConfigureAwait(false); } else { foundBeatmap = await beatmapLookupCache.GetBeatmapAsync(Item.BeatmapID).ConfigureAwait(false); } Schedule(() => Item.Beatmap.Value = foundBeatmap); } } catch (Exception e) { Logger.Log($"Error while populating playlist item {e}"); } }); }; refresh(); }