Only execute commands from code if allowed

This commit is contained in:
tyrrrz 2026-04-02 14:36:06 +03:00
parent f6166764e9
commit d467948d0b
3 changed files with 19 additions and 4 deletions

View file

@ -0,0 +1,15 @@
using System.Windows.Input;
namespace DiscordChatExporter.Gui.Utils.Extensions;
internal static class CommandExtensions
{
extension(ICommand command)
{
public void ExecuteIfCan(object? parameter = null)
{
if (command.CanExecute(parameter))
command.Execute(parameter);
}
}
}

View file

@ -4,6 +4,7 @@ using Avalonia.Input;
using Avalonia.Interactivity; using Avalonia.Interactivity;
using DiscordChatExporter.Core.Discord.Data; using DiscordChatExporter.Core.Discord.Data;
using DiscordChatExporter.Gui.Framework; using DiscordChatExporter.Gui.Framework;
using DiscordChatExporter.Gui.Utils.Extensions;
using DiscordChatExporter.Gui.ViewModels.Components; using DiscordChatExporter.Gui.ViewModels.Components;
namespace DiscordChatExporter.Gui.Views.Components; namespace DiscordChatExporter.Gui.Views.Components;
@ -18,7 +19,7 @@ public partial class DashboardView : UserControl<DashboardViewModel>
private void AvailableGuildsListBox_OnSelectionChanged( private void AvailableGuildsListBox_OnSelectionChanged(
object? sender, object? sender,
SelectionChangedEventArgs args SelectionChangedEventArgs args
) => DataContext.PullChannelsCommand.Execute(null); ) => DataContext.PullChannelsCommand.ExecuteIfCan(null);
private void AvailableChannelsTreeView_OnSelectionChanged( private void AvailableChannelsTreeView_OnSelectionChanged(
object? sender, object? sender,
@ -40,6 +41,6 @@ public partial class DashboardView : UserControl<DashboardViewModel>
if (DataContext.SelectedChannels.Count != 1) if (DataContext.SelectedChannels.Count != 1)
return; return;
DataContext.ExportCommand.Execute(null); DataContext.ExportCommand.ExecuteIfCan(null);
} }
} }

View file

@ -54,8 +54,7 @@ public partial class HyperLink : UserControl
{ {
if (Command is not null) if (Command is not null)
{ {
if (Command.CanExecute(CommandParameter)) Command.ExecuteIfCan(CommandParameter);
Command.Execute(CommandParameter);
} }
else if (!string.IsNullOrWhiteSpace(Url)) else if (!string.IsNullOrWhiteSpace(Url))
{ {