【问题标题】:Close child window from parent viewmodel wpf mvvm从父视图模型 wpf mvvm 关闭子窗口
【发布时间】:2013-07-15 12:14:38
【问题描述】:

点击确定/取消后关闭子Window

我正在从父 mvm 模型调用子窗口:

//parent view model
var optionSetViewModel = new OptionSetViewModel();
var optionSet = new OptionSet();
optionSet.SetViewModel(optionSetViewModel);

optionSet.SetOwner(_componentview);
optionSet.ShowDialog();

child Window 的 ok 和 cancel 代码写在子视图模型中:

private void OkClick()
{           
    _childWindow.Close();
}

它关闭得很好,但是当它从调用它的位置返回到父视图模型时关闭后,它会抛出空引用异常。关闭后,我正在访问子窗口值:

_someText = optionSetViewModel.SomeText;
_noteText = optionSetViewModel.NoteText;
_optionsetLanguage = optionSetViewModel.OptionSetSelectedItem;
_optionsetselected = optionSetViewModel.OptionSetSelected.ToString();

【问题讨论】:

  • 我们需要在optionSet.ShowDialog();之后查看您的代码
  • 更新的代码 ppls 做检查
  • 你应该让 Messenger 类处理 ViewModel 之间的关闭,这样更容易。
  • 您是否在视图中重写了 OnClosing(),它是否处理某些内容或将值设置为 null?如果是这样,那就是你的空指针。调试代码时,哪个指针为空?要以最快的速度进行调试,请从主菜单中单击“调试”,然后单击“异常”,然后选中左侧顶部的第二个复选框。单击确定,然后运行您的应用程序。然后它将在引发异常的代码行上停止。将鼠标悬停在任何用于确定哪个为空的变量上。
  • 嗨,Curtis thnx 建议我只有一周大的 wpf 可以给我发送一个示例,如果你有时间请教我如何做到这一点

标签: c# wpf mvvm window


【解决方案1】:

使用 Catel(请参阅 http://www.catelproject.com/),您可以关闭基于视图模型的视图。因此关闭视图意味着这样的调用:

myChildViewModel.CloseViewModel();

显示子窗口:

var myChildViewModel = new MyChildViewModel();
uiVisualizerService.Show(myChildViewModel);

【讨论】:

    猜你喜欢
    • 2018-06-12
    • 1970-01-01
    • 2015-04-09
    • 2020-09-04
    • 1970-01-01
    • 2015-05-13
    • 2013-02-14
    • 1970-01-01
    • 2012-04-22
    相关资源
    最近更新 更多