如何在 wpf c# 中实现 CanExecute 命令或 Delegate 命令中的 if、else 语句?

How to implement if, else statement in CanExecute command or Delegate command in wpf c#?

我是 WPFPrism 的新手。在使用 CommandCanExecute()CommandExecute()/Delegate 命令时如何使用 if else 语句?

我有一个代码可以加载和获取 livechart 的实例。但是,如果用户桌面上不存在图表文件,我的应用程序就会崩溃。 我想实现一个 if else 语句来说明如果找不到图形,显示一个消息框通知有错误,而不是使程序崩溃。

我尝试搜索 RaiseCanExecuteChanged 但不确定如何实施。

   private bool BEYieldCommandCanExecute()
    {
        return true;
    }

    private void BEYieldCommandExecute() 

    {
        if (true)
        {
            _eventAggregator.GetEvent<GraphPubSubEvent>().Publish(_viewName);

        }

        else
        {//Check
            MessageBox.Show("Error loading. Please ensure Excel file/Server file exist in Desktop/Server to generate Chart.", "Invalid Request", MessageBoxButton.OK, MessageBoxImage.Exclamation);
        }
    }

非常感谢!!

你应该更准确。我不明白你的意思。如果您在某个文件中有此图表,请这样做:

在顶部添加此引用:

using System.IO;

然后在您的代码中检查文件是否存在:

if (!File.Exists("someFile.txt"))
{
CreateFile("someFile.txt");
}
else
{
DoSomeActionWithFile("someFile.txt")
}

另一种方法是阻止 try-catch

try
{
OpenFile("someFile.txt");
}
catch(Exception ex)
{
LogError(ex.toString());
DoSomethingWithInErrorCase();
}

ICommand 实现旨在构建为可绑定命令
DelegateCommand.RaiseCanExecuteChange()是在UI中启用按钮时刷新。
它不打算用于命令背后的逻辑。

例如: XAML 保存按钮绑定 <Button Command="{Binding SaveCommand}" />

仅在需要保存记录时才启用按钮的 ViewModel 命令

    private DelegateCommand _saveCommand;
    public DelegateCommand SaveCommand =>
        _saveCommand ?? (_saveCommand = new DelegateCommand(ExecuteSaveCommand, CanExecuteSaveCommand));

    void ExecuteSaveCommand()
    {
        // Save logic goes here
    }

    private bool CanExecuteSaveCommand()
    {
        var isDirty = CurrentRecord.GetIsDirty();
        return isDirty;
    }

当绑定 UI 时,SaveCommand CanExecuteSaveCommand() 方法是 运行 并且假设记录在加载时没有变脏。
诀窍是连接一个事件,以便在更新 MyRecord 时通过调用 _saveCommand.RaiseCanExecuteChanged

启用 UI 按钮
    public MainWindowViewModel(IRecordDataService dataService)
    {
        CurrentRecord = dataService.GetRecord();
        CurrentRecord.Updated += (sender, args) => _saveCommand.RaiseCanExecuteChanged();
    }

在XAML中:<Button Command="{Binding OpenDialogCommand }" />

public class ViewModel
{
    public DelegateCommand OpenDialogCommand { get; set; }

    public ViewModel()
    {
        OpenDialogCommand = new DelegateCommand(BrowseFile);
    }

    private void BrowseFile()
    {
        var openDialog = new OpenFileDialog()
        {
            Title = "Choose File",
            // TODO: etc v.v
        };
        openDialog.ShowDialog();
        if (File.Exists(openDialog.FileName))
        {
            // TODO: Code logic is here


        }
        else
        {
            // TODO: Code logic is here
        }
    }
}

`

你不应该在它自己的命令中这样做。 当您将命令绑定到一个按钮时,当您无法执行该任务时,该按钮将不会被启用。

bool CanExecute()
{
    return File.Exists("some/path/to/file.ext");
}

此外,您应该向 UI 添加一条消息(例如,在按钮旁边,或作为工具提示),该消息仅在按钮被禁用时才可见。