gpt4 book ai didi

c# - 从 ViewModel 打开新窗口

转载 作者:太空狗 更新时间:2023-10-30 00:31:46 26 4
gpt4 key购买 nike

我应该如何打开新窗口?我目前正在做以下事情。

事件参数:

public class GenericViewRequestedEventArgs : EventArgs
{
public GenericViewModel ViewModel { get; private set; }

public GenericViewRequestedEventArgs(GenericViewModel viewModel)
{
ViewModel = viewModel;
}
}

View 模型:

public class MainWindowViewModel : ViewModelBase
{
private RelayCommand _viewSpecificCommand;

public ICommand ViewSpecificCommand
{
get
{
if (_viewSpecificCommand == null)
_viewSpecificCommand = new RelayCommand(x => viewSpecific());

return _viewSpecificCommand;
}
}

public EventHandler<GenericViewRequestedEventArgs> GenericViewRequested;

private void RaiseGenericViewRequested(GenericViewModel viewModel)
{
var handler = GenericViewRequested;
if (handler != null)
handler(this, new GenericViewRequestedEventArgs(viewModel));
}

private void viewSpecific()
{
RaiseGenericViewRequested(_specificViewModel);
}
}

查看:

public partial class MainWindow : Window
{
private void OnGenericViewRequested(object sender, GenericViewRequestedEventArgs e)
{
GenericWindow window = new GenericWindow(e.ViewModel);
window.ShowDialog();
}
}

这确实有效,但它似乎有很多代码,而且我最终以任何方式在我看来都隐藏了代码。

  • 将命令发送到 View 模型背后的逻辑是什么?
  • 是否只是选择性地使用谓词(如果是这样,为什么不绑定(bind)到 Enabled)并可能避免将其他 View 模型公开为属性?
  • 我应该在 XAML 中附加简单的事件处理程序(例如 Click="btnViewSpecific_Click")吗?

最佳答案

这取决于您希望遵循 MVVM 模式的“严格”程度。这只是 MVVM 的基本陷阱之一,您可以根据自己的喜好解决它。一种方法是简单地使用代码隐藏,但是你将如何处理应用程序范围的命令、键盘快捷键等?恕我直言,这有点太短视了。

我认为您至少应该考虑使用多年前已经为您解决这些问题并将为您的应用程序提供坚实基础的现有框架。

例如,Catel有一个IUIVisualizerService可以显示基于 View 模型的窗口。主要优点是您可以将数据推送到 View 模型并将结果作为服务响应。另一个好处是您可以模拟 IUIVisualizerService,这样您就可以根据对话框提供的不同结果测试 react 代码。

**免责声明**

我是 Catel 的开发者,所以我在这里解释了 Catel 的方式。如果有人想对其他框架发表评论,请随时发表评论或创建新答案。

关于c# - 从 ViewModel 打开新窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23012086/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com