wpf中DialogResult.Yes方法报错

原因:在WPF里DialogResult没有Yes或No的枚举取值了

所以应该这样写

private void Button_Click(object sender, RoutedEventArgs e)
{
  if (MessageBox.Show ("要退出程序吗?", "退出程序",MessageBoxButton.YesNo ) == MessageBoxResult.Yes)
  {
  this.Close();
  }

}

WPF DialogResult 是一个 UI 控件的属性,而 ViewModel 是不应该直接与 UI 控件交互的。所以,我们需要使用一些技巧将 DialogResult 属性绑定到 ViewModel。 一种常见的方法是使用事件。在 ViewModel ,定义一个事件,当需要关闭窗口时,触发此事件。在 View ,订阅此事件,当事件触发时,设置 DialogResult 属性,从而关闭窗口。 以下是一个示例代码: ViewModel: ```c# public class MyViewModel { public event EventHandler<bool?> CloseDialog; private void OnCloseDialog(bool? result) { CloseDialog?.Invoke(this, result); } private void Save() { // Do some save logic OnCloseDialog(true); } private void Cancel() { OnCloseDialog(false); } } ``` View: ```xml <Window> <i:Interaction.Triggers> <i:EventTrigger EventName="CloseDialog"> <i:InvokeCommandAction Command="{Binding CloseCommand}" CommandParameter="{Binding EventArgs}" /> </i:EventTrigger> </i:Interaction.Triggers> </Window> ``` 在上面的代码,我们使用了 Interactivity 库来实现事件触发命令的功能。当 CloseDialog 事件触发时,会执行 CloseCommand 命令,并将 EventArgs 参数传递给命令。 在 ViewModel ,我们需要实现 CloseCommand 命令,用于处理关闭窗口的逻辑。 ```c# public class MyViewModel { public ICommand CloseCommand { get; private set; } public MyViewModel() { CloseCommand = new RelayCommand<object>(Close); } private void Close(object parameter) { var args = parameter as EventArgs; var result = args?.Args[0] as bool?; if (result != null) { // Set DialogResult property to close the window var window = Application.Current.Windows.OfType<Window>().FirstOrDefault(w => w.IsActive); if (window != null) { window.DialogResult = result; } } } } ``` 在 Close 方法,我们首先获取 CloseCommand 命令的参数,也就是 CloseDialog 事件的参数。然后,我们从参数获取 DialogResult 属性的值,并将其设置为当前活动窗口的 DialogResult 属性,从而关闭窗口。 需要注意的是,我们在 Close 方法使用了 Application.Current.Windows 属性来获取当前活动窗口。这是因为 WPF 应用程序可能有多个窗口,而这个属性可以获取所有打开的窗口集合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值