窗口的MVVM方法出现在前面

时间:2014-08-08 16:05:40

标签: c# wpf mvvm mahapps.metro attachedbehaviors

我有一个wpf应用程序需要根据特定条件在所有其他窗口中弹出。我试图以符合MVVM的方式完成此任务。经过大量研究,最佳解决方案是使用窗口的激活事件和界面行为。我能够使用mvvm activate上的第二个解决方案使激活功能正常工作。然而,一旦我使用Mahapp Metro控件" MetroWindow"基于quickstart guide,GUI会混乱。每当添加XAML交互行为部分时,就会出现GUI的原始Window对象,从而产生2个标题栏(一个来自Window,另一个来自MetroWindow)。我尝试使用Metro样式设计我自己的窗口,但到目前为止无法实现Metro标题栏(无法找到任何指南或文档)。 Visual Studio也一直在抱怨"对象引用未设置为对象的实例" (有时在

<controls:MetroWindow
...

和其他时间

<i:Interaction.Behaviors>
    <Behaviors:ActivateBehavior ...

然后应用程序运行。

如何保持Mahapps Metro样式(包括标题栏样式)并使窗口显示在前面,由我的业务逻辑以符合MVVM的方式确定?

1 个答案:

答案 0 :(得分:0)

这不是你问题本质的答案,但也许你可以用这样的东西来激活一个窗口:

using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;    
using GalaSoft.MvvmLight.Messaging;

// View

public partial class TestActivateWindow : Window
{
    public TestActivateWindow() {
        InitializeComponent();
        Messenger.Default.Register<ActivateWindowMsg>(this, (msg) => Activate());
    }
}

// View Model

public class ActivateWindowMsg
{
}

public class MainViewModel: ViewModelBase
{
    ICommand _activateChildWindowCommand;

    public ICommand ActivateChildWindowCommand {
        get {
            return _activateChildWindowCommand?? (_activateChildWindowCommand = new RelayCommand(() => {
                Messenger.Default.Send(new ActivateWindowMsg());
        }));
        }
    }
}