/// <summary> /// 将某个 <see cref="ViewModelBase"/> 中创建的 <see cref="AsyncCommandBase"/> 加入到异步互斥命令集合中进行统一管理。 /// </summary> /// <param name="viewModel">异步互斥命令的互斥边界,在此 ViewModel 中。</param> /// <param name="asyncCommand">互斥的异步命令。</param> private static void ManageExclusiveCommand( [NotNull] ViewModelBase viewModel, [NotNull] AsyncCommandBase asyncCommand) { if (!ManagedAsyncCommandDictionary.TryGetValue(viewModel, out var commands)) { commands = new HashSet <AsyncCommandBase>(); ManagedAsyncCommandDictionary[viewModel] = commands; } commands.Add(asyncCommand); }
/// <summary> /// 找到与指定 <see cref="AsyncCommandBase"/> 异步命令互斥的所有异步命令。 /// </summary> /// <param name="asyncCommand">查找与之互斥的异步命令。</param> /// <returns>与指定异步命令互斥的所有异步命令。</returns> internal static IEnumerable <AsyncCommandBase> FindExclusiveCommandsFrom([NotNull] AsyncCommandBase asyncCommand) { if (asyncCommand == null) { throw new ArgumentNullException(nameof(asyncCommand)); } foreach (var pair in ManagedAsyncCommandDictionary) { if (pair.Value.Contains(asyncCommand)) { return(FindExclusiveCommandsFrom(pair.Key)); } } return(Enumerable.Empty <AsyncCommandBase>()); }