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

问题描述 投票:0回答:4

我是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);
        }
    }

非常感谢!!

c# wpf if-statement prism delegatecommand
4个回答
0
投票

在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
        }
    }
}

`


0
投票

ICommand实现旨在构建为可绑定命令 如果在UI中启用了按钮,则会刷新DelegateCommand.RaiseCanExecuteChange()。 它不打算用在命令后面的逻辑中。

例如: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();
    }

0
投票

你应该更精确。我不知道你的意思。如果您在某个文件中有此图表,请执行以下操作:

在顶部添加此参考:

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();
}

0
投票

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

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

此外,您应该向UI添加消息(例如,在按钮旁边,或作为工具提示),只有在禁用按钮时才会显示该消息。

© www.soinside.com 2019 - 2024. All rights reserved.