情况如何:
我正在使用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需要很多逻辑,我想封装它。
最好的问候,混搭