相关疑难解决方法(0)

使用MVVM在WPF中创建新窗口的最佳方法

在邻居帖子中:ViewModel应如何关闭表单? 我发布了如何使用MVVM关闭Windows的愿景.现在我有一个问题:如何打开它们.

我有一个主窗口(主视图).如果用户单击"显示"按钮,则应显示"演示"窗口(模态对话框).使用MVVM模式创建和打开窗口的首选方法是什么?我看到两种一般方法:

第一个(可能是最简单的).事件处理程序"ShowButton_Click"应该在主窗口的代码中实现,方式如下:

        private void ModifyButton_Click(object sender, RoutedEventArgs e)
        {
            ShowWindow wnd = new ShowWindow(anyKindOfData);
            bool? res = wnd.ShowDialog();
            if (res != null && res.Value)
            {
                //  ... store changes if neecssary
            }
        }
Run Code Online (Sandbox Code Playgroud)
  1. 如果我们"显示"按钮状态应该被更改(启用/禁用),我们将需要添加将管理按钮状态的逻辑;
  2. 源代码非常类似于"旧式"WinForms和MFC源 - 我不确定这是好还是坏,请指教.
  3. 还有其他我错过的东西?

另一种方法:

在MainWindowViewModel中,我们将实现"ShowCommand"属性,该属性将返回命令的ICommand接口.Comman反过来:

  • 将举起"ShowDialogEvent";
  • 将管理按钮状态.

这种方法将更适合MVVM,但需要额外的编码:ViewModel类不能"显示对话框",因此MainWindowViewModel只会引发"ShowDialogEvent",MainWindowView我们需要在其MainWindow_Loaded方法中添加事件处理程序,这样的事情:

((MainWindowViewModel)DataContext).ShowDialogEvent += ShowDialog;
Run Code Online (Sandbox Code Playgroud)

(ShowDialog - 类似于'ModifyButton_Click'方法.)

所以我的问题是:1.你看到其他任何方法吗?你认为其中一个是好还是坏?(为什么?)

欢迎任何其他想法.

谢谢.

.net c# wpf mvvm

55
推荐指数
3
解决办法
5万
查看次数

在MVVM WPF中打开新窗口

我有Button,我已将此按钮绑定到ViewModel中的命令说OpenWindowCommand.当我点击按钮时,我想打开新窗口.但是创建窗口实例并从视图模型显示窗口违反了MVVM.我已经创建了界面

interface IWindowService
{
 void showWindow(object dataContext);
}
Run Code Online (Sandbox Code Playgroud)

和WindowService一样实现这个接口

class WindowService:IWindowService
{
 public void showWindow(object dataContext)
 {
  ChildWindow window=new ChildWindow();
  window.DataContext=dataContext;
  window.Show();
  }
}
Run Code Online (Sandbox Code Playgroud)

在这个课程中,我指定了ChildWindow.因此,这个类与显示ChildWindow紧密结合.当我想要显示另一个窗口时,我必须实现具有相同接口和逻辑的另一个类.如何使这个类通用,以便我可以传递任何窗口的实例,并且类将能够打开任何窗口?我没有使用任何构建的MVVM框架.我已经阅读了很多关于StackOverflow的文章,但我找不到任何解决方案.

c# wpf mvvm

39
推荐指数
2
解决办法
6万
查看次数

使用WPF MVVM模式打开新窗口的最佳实践

我一直在想这个问题......从另一个视图模型中打开一个新窗口(view&viewmodel)的最佳做法是什么如果我们记住打开新窗口的viewmodel不知道是否存在那个观点(应该如此).

谢谢.

wpf mvvm

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

在MVVM中打开一个新窗口

假设我有一个MainWindow和一个MainViewModel,我在这个例子中没有使用MVVM LightPrism.
在这个MainWindow我想点击一个MenuItemButton打开一个NewWindow.xaml不是UserControl.
我知道如何使用它在一个或一个现有的窗口中UserControl打开一个新的.UserControlContrntControlFrame

<ContentControl Content="{Binding Path=DisplayUserControl,UpdateSourceTrigger=PropertyChanged}" />
Run Code Online (Sandbox Code Playgroud)

public ViewModelBase DisplayUserControl
{
    get
    {
        if (displayUserControl == null)
        {
            displayUserControl = new ViewModels.UC1iewModel();
        }
        return displayUserControl;
    }
    set
    {
        if (displayUserControl == value)
        {
            return;
        }
        else
        {
            displayUserControl = value;
            OnPropertyChanged("DisplayUserControl");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

ResourceDitionaryMainWindow我有:

<DataTemplate DataType="{x:Type localViewModels:UC1ViewModel}">
    <localViews:UC1 />
</DataTemplate> …
Run Code Online (Sandbox Code Playgroud)

c# mvvm

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

在模型视图ViewModel中打开新窗口的最佳位置

我有一个MVVM应用程序.其中一个ViewModels是填充ObservableCollection的'FindFilesCommand'.然后我在同一个ViewModel中实现'RemoveFilesCommand'.然后,此命令将打开一个窗口以获取更多用户输入.

在保持MVVM范式的同时/最佳方式是什么?不知怎的做:

new WhateverWindow( ).Show( ) 

在ViewModel中似乎错了.

干杯,

史蒂夫

wpf design-patterns mvvm

9
推荐指数
1
解决办法
2710
查看次数

如何使用MVVM处理打开和关闭新Windows?

使用MVVM和WPF,处理打开和关闭新窗口和对话框的好方法是什么?打开和关闭应该由ViewModel驱动吗?但ViewModel不应该知道视图......

wpf dialog window mvvm

9
推荐指数
1
解决办法
3458
查看次数

如何使用数据触发器设置WPF行为属性

我试图通过以下方式使用样式设置WPF行为属性:

<StackPanel>
    <CheckBox Name="IsFemaleChkBox" Content="Is Female ?" />
    <TextBlock>
        <Hyperlink> <!--setting property directly like this:  local:MyHyperLinkBehavior.Salutation="Mr." isn't working either-->
            <TextBlock Text="My Hyperlink"/>
            <Hyperlink.Style>
                <Style TargetType="Hyperlink">
                    <Setter Property="local:MyHyperLinkBehavior.Salutation" Value="Mr." />
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsChecked, ElementName=IsFemaleChkBox}" Value="True">
                            <Setter Property="local:MyHyperLinkBehavior.Salutation" Value="Miss" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Hyperlink.Style>
        </Hyperlink>
    </TextBlock>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

行为类代码是这样的:

class MyHyperLinkBehavior : Behavior<Hyperlink>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject.Click += AssociatedObject_Click;
    }

    public static bool GetIsFemale(DependencyObject obj)
    {
        return (bool)obj.GetValue(IsFemaleProperty);
    }

    public static void SetIsFemale(DependencyObject obj, bool value)
    {
        obj.SetValue(IsFemaleProperty, …
Run Code Online (Sandbox Code Playgroud)

.net c# wpf xaml

6
推荐指数
2
解决办法
5212
查看次数

标签 统计

mvvm ×6

wpf ×6

c# ×4

.net ×2

design-patterns ×1

dialog ×1

window ×1

xaml ×1