相关疑难解决方法(0)

使用MVVM处理WPF中的对话框

在WPF的MVVM模式中,处理对话框是更复杂的操作之一.由于您的视图模型对视图一无所知,因此对话通信很有趣.我可以公开一个ICommand,当视图调用它时,会出现一个对话框.

有没有人知道处理对话结果的好方法?我说的是关于Windows对话框,比如MessageBox.

我们这样做的方法之一是在viewmodel上有一个事件,当需要对话框时,视图会订阅该事件.

public event EventHandler<MyDeleteArgs> RequiresDeleteDialog;
Run Code Online (Sandbox Code Playgroud)

这没关系,但这意味着视图需要代码,这是我想远离的东西.

.net wpf design-patterns dialog mvvm

232
推荐指数
8
解决办法
11万
查看次数

你是如何在MVVM中成功实现MessageBox.Show()功能的?

我有一个WPF应用程序,它在ViewModel中调用MessageBox.Show()方式(以检查用户是否真的要删除).这实际上是有效的,但是违背了MVVM,因为ViewModel不应该明确地确定View上发生了什么.

所以现在我在想如何在我的MVVM应用程序中最好地实现MessageBox.Show()功能,选项:

  1. 我可以收到一条短信,上面写着"你确定......?" 以及我的XAML中的边框中的两个按钮是和否全部,并在模板上创建一个触发器,使其基于名为AreYourSureDialogueBoxIsVisible的ViewModelProperty折叠/可见,然后当我需要此对话框时,将AreYourSureDialogueBoxIsVisible指定为"true" "还可以通过我的ViewModel中的DelegateCommand处理这两个按钮.

  2. 我也可以尝试用XAML中的触发器来处理这个问题,这样删除按钮实际上只会使一些Border元素出现,其中包含消息和按钮,而Yes按钮实际上是删除了.

对于曾经使用MessageBox.Show()的几行代码而言,这两种解决方案似乎都过于复杂.

您在哪些方面成功实现了MVVM应用程序中的Dialogue Box?

wpf triggers messagebox mvvm

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

从视图模型获取窗口

我创建了一个自定义messageBox窗口来替换典型的MessageBox。

我的自定义messageBox(子窗口)需要将父窗口作为参数传递。父窗口是子窗口将在指定位置(左上角,居中居中等)内作为参数的位置。

因此,当从视图模型调用我的自定义messageBox时,我需要让Window传递它。如何获得与视图模型关联的窗口?

也许使用像这里评论的接口?我正在尝试实现它,但是this.DataContext.View不存在。

我正在使用Visual Studio 2008。

ATTEMPT#1:mm8解决方案

<Window x:Class="MyNamespace.Main"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:viewmodel="clr-namespace:MyNamespace.ViewModels">
    <Window.Resources>
        <viewmodel:MainViewModel x:Key="wMainViewModel" />
    </Window.Resources>

    <Grid DataContext="{StaticResource wMainViewModel}">
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

考虑到我是从xaml初始化DataContext的,而不是从构造函数的代码隐藏的,所以如何将视图传递给视图模型?

c# wpf mvvm

3
推荐指数
1
解决办法
3975
查看次数

标签 统计

mvvm ×3

wpf ×3

.net ×1

c# ×1

design-patterns ×1

dialog ×1

messagebox ×1

triggers ×1