如何在 wpf c# 中实现 CanExecute 命令或 Delegate 命令中的 if、else 语句?
How to implement if, else statement in CanExecute command or Delegate command in wpf c#?
我是 WPF
和 Prism
的新手。在使用 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 添加一条消息(例如,在按钮旁边,或作为工具提示),该消息仅在按钮被禁用时才可见。
我是 WPF
和 Prism
的新手。在使用 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
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 添加一条消息(例如,在按钮旁边,或作为工具提示),该消息仅在按钮被禁用时才可见。