相关疑难解决方法(0)

ViewModel应如何关闭表单?

我正在尝试学习WPF和MVVM问题,但是遇到了障碍.这个问题与此问题相似但不完全相同(处理对话框-wpf-with-mvvm) ...

我有一个使用MVVM模式编写的"登录"表单.

此表单有一个ViewModel,它包含用户名和密码,这些用户名和密码使用普通数据绑定绑定到XAML中的视图.它还有一个"登录"命令,该命令绑定到表单上的"登录"按钮,使用正常数据绑定.

当"登录"命令触发时,它会调用ViewModel中的一个函数,该函数将关闭并通过网络发送数据以进行登录.当此函数完成时,有2个操作:

  1. 登录无效 - 我们只显示一个MessageBox,一切都很好

  2. 登录有效,我们需要关闭登录表单并让它返回true作为其DialogResult...

问题是,ViewModel对实际视图一无所知,那么如何关闭视图并告诉它返回一个特定的DialogResult?我可以在CodeBehind中粘贴一些代码,和/或将View传递给ViewModel,但这似乎完全打败了MVVM的全部内容......


更新

最后,我刚刚违反了MVVM模式的"纯度",并让View发布了一个Closed事件,并公开了一个Close方法.ViewModel然后才会调用view.Close.该视图仅通过接口已知并通过IOC容器连接,因此不会丢失可测试性或可维护性.

接受的答案是-5票,这似乎很愚蠢!虽然我很清楚通过在"纯粹"时解决问题所获得的良好感受,当然我不是唯一一个认为200行事件,命令和行为只是为了避免单行方法"模式"和"纯度"的名称有点荒谬......

c# wpf mvvm

239
推荐指数
8
解决办法
10万
查看次数

在MVVM中为View提供一些命令

我们假设我有一些用户控制权.用户控件有一些子窗口.并且用户控制用户想要关闭某种类型的子窗口.用户控制代码中有一种方法:

public void CloseChildWindows(ChildWindowType type)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

但我无法调用此方法,因为我无法直接访问该视图.

我想到的另一个解决方案是以某种方式将用户控件ViewModel作为其属性之一公开(因此我可以绑定它并直接向ViewModel发出命令).但我不希望用户控制用户知道有关用户控件ViewModel的任何信息.

那么解决这个问题的正确方法是什么?

.net c# wpf mvvm

16
推荐指数
4
解决办法
6696
查看次数

WPF MVVM - 如何在单击按钮时从MainWindowViewModel显示视图

可能重复:
使用MVVM在WPF中创建新窗口的最佳方法

你好朋友,

我有两个视图MainWindowViewAddCustomerView.我在MainwindowView.xmal中有包含按钮的菜单.

如何通过单击按钮从MainWindowViewModel弹出AddCustomerView.

我的App.xmal.cs用于启动代码是..

base.OnStartup(e);
MainWindow window = new MainWindow();
var viewModel = new MainWindowViewModel();
window.DataContext = viewModel;
window.Show();
Run Code Online (Sandbox Code Playgroud)

在buttonexecute代码中显示AddCustomerView的代码是什么.

 public void AddNewCustomerWindowExecute() //This is button handler
 {
     // How to show AddCustomerView from MainWindowViewModel
 }
Run Code Online (Sandbox Code Playgroud)

wpf mvvm

4
推荐指数
1
解决办法
2万
查看次数

标签 统计

mvvm ×3

wpf ×3

c# ×2

.net ×1