相关疑难解决方法(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在wpf中使用Dialogs的好坏?

我最近遇到了为我的wpf应用程序创建添加和编辑对话框的问题.

我想在代码中做的就是这样.(我主要使用viewmodel第一种方法与mvvm)

调用对话框窗口的ViewModel:

var result = this.uiDialogService.ShowDialog("Dialogwindow Title", dialogwindowVM);
// Do anything with the dialog result
Run Code Online (Sandbox Code Playgroud)

它是如何工作的?

首先,我创建了一个对话服务:

public interface IUIWindowDialogService
{
    bool? ShowDialog(string title, object datacontext);
}

public class WpfUIWindowDialogService : IUIWindowDialogService
{
    public bool? ShowDialog(string title, object datacontext)
    {
        var win = new WindowDialog();
        win.Title = title;
        win.DataContext = datacontext;

        return win.ShowDialog();
    }
}
Run Code Online (Sandbox Code Playgroud)

WindowDialog是一个特殊而简单的窗口.我需要它来保留我的内容:

<Window x:Class="WindowDialog"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    Title="WindowDialog" 
    WindowStyle="SingleBorderWindow" 
    WindowStartupLocation="CenterOwner" SizeToContent="WidthAndHeight">
    <ContentPresenter x:Name="DialogPresenter" Content="{Binding .}">

    </ContentPresenter>
</Window>
Run Code Online (Sandbox Code Playgroud)

wpf中对话框的问题是dialogresult = true只能在代码中实现.这就是为什么我为我dialogviewmodel实现它的界面.

public class …
Run Code Online (Sandbox Code Playgroud)

.net c# wpf modal-dialog mvvm

145
推荐指数
3
解决办法
6万
查看次数

打开文件对话框MVVM

好的,我真的想知道专家MVVM开发人员如何处理WPF中的openfile对话框.

我真的不想在我的ViewModel中执行此操作(其中'Browse'通过DelegateCommand引用)

void Browse(object param)
{
    //Add code here
    OpenFileDialog d = new OpenFileDialog();

    if (d.ShowDialog() == true)
    {
        //Do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

因为我认为这违背了MVVM方法论.

我该怎么办?

wpf openfiledialog mvvm

45
推荐指数
5
解决办法
4万
查看次数

WPF MVVM对话框示例

有没有人有任何使用MVVM(Prism)显示窗口对话框的例子? - 例如,执行命令时的配置设置窗口.

我见过的所有例子都使用了很好的中介模式,但是他们也都在视图模型中引用了一个不理想的视图(我们使用的是DataTemplates)

谢谢

wpf prism mvvm mediator prism-2

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

在PropertyGrid控件中显示只读属性

我正在使用WPF扩展工具包来显示Team对象的属性.现在其中一个属性是人物集合.没问题,我得到一个很好的下拉,当我点击时,向我显示每个人的姓名和年龄.

在此输入图像描述

现在的问题是我实际上并不希望将我的Collection公开为public.但是,只要我将其setter设为私有,就会禁用该属性,以防止用户看到Person集合和人员详细信息:

在此输入图像描述

当它的setter是私有的时候我该如何显示我的Person Collection?我可以使用XAML模板执行此操作吗?如果是这样的话?我正在使用MVVM,因此我不想在代码中添加任何内容.

更新

好的,所以@tencntraze的解决方案让我大部分都在那里 - 谢谢.但是它对于对象的集合不起作用,这是我在我的情况下得到的.此外,它还可以简化为使用CollectionControlDialog而不是下面实现的自定义ReadOnlyCollectionViewer.

XAML

<UserControl x:Class="DevExpressTreeList.ReadOnlyCollectionEditor"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             x:Name="MyUserControl"
             >
    <DockPanel>
        <Button Click="Button_OnClick" DockPanel.Dock="Right">
            <Label Content="?" Padding="2,0,2,0" />
        </Button>
        <Label Name="CollectionLabel" Content="(Collection)" Padding="2,2,2,0" />
    </DockPanel>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

代码隐藏

public partial class ReadOnlyCollectionEditor : UserControl, ITypeEditor
{
    public ReadOnlyCollectionEditor()
    {
        InitializeComponent();
    }

    // Use typeof(object) to allow for any Collection<T>
    public static readonly DependencyProperty ValueProperty = DependencyProperty.Register(
        "Value", typeof(object), typeof(ReadOnlyCollectionEditor), new PropertyMetadata(default(object)));

    public object Value
    {
        // We are now using …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml mvvm wpftoolkit

7
推荐指数
1
解决办法
5720
查看次数

使用MVVM Foundation Messenger显示对话框

我正在构建一个WPF应用程序并尝试符合MVVM最佳实践.我正在使用MVVM Foundation框架,并注意到我读过的Messenger类应该用于处理WPF中的对话框.这听起来很棒,但我完全不了解如何使用Messenger来实现此目的.从字面上看,我想要做的就是打开一个模态关于对话框 - 我不需要来回传递任何消息.

Messenger类的目的是用于对话框需要来自其父级的消息,还是将消息返回给其父级的情况?关于对话框是否有点过分?如果只是将代码添加到事件处理程序以显示对话框,我会更好吗?

wpf dialog mvvm mvvm-foundation messenger

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