加载时将窗口置于前面(Caliburn.Micro)

时间:2016-05-21 20:44:14

标签: c# wpf mvvm caliburn.micro mahapps.metro

情况如何:

我正在使用MVVM模式处理C#WPF应用程序。我正在使用Caliburn.Micro和MahApps.Metro。

我在ViewModelA中有一个ViewModel列表:

ObservableCollection<ViewModelB> ViewModelList { get; set; }  // short version

我对应的View中有一个ListView绑定到此列表:

<ListView ItemsSource="{Binding ViewModelList}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <ContentControl cal:View.Model="{Binding }" />
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

列表中的ViewModel由ContentControl显示。

在ViewModelB中,有一个事件在双击相应的View(MetroWindow)时被调用:

public void OnDoubleClick()
{
    var windowManager = IoC.Get<IWindowManager>();
    windowManager.ShowWindow(new ViewModelC());
}

WindowManager为我显示一个新的非模态窗口(ViewModelC视图)。

有什么问题:

在WindowManager显示之后,非模态窗口没有聚焦并且在我的主窗口后面。

我为我的窗口尝试了很多设置,比如ShowActivated,Owner,Topmost ...... 当我将所有者设置为我的主窗口时,显示的窗口就像Topmost设置为true一样。

我只希望窗口出现在我的主窗口前面(不是Topmost = true)并且聚焦。

不满意的解决方案:

我可以将ContentControl替换为我想要显示的视图,并删除ViewModel列表。如果我这样做,我可以收听ListView的MouseDoubleClick事件,并使用SelectedIndex属性获取所选元素。

如果我这样做,所显示的窗口就像我想要的那样(在顶部,聚焦)。

但ViewModelB需要很多逻辑,我想封装它。

最好的问候,混搭

0 个答案:

没有答案