wpf MvvmCross Navigation(交叉导航)打开一个新窗口,并让原始窗口保持打开状态

4nkexdtk  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(236)

我想打开一个新窗口,而不是另一个窗口中的视图。我有一个通知图标,其中有一个菜单,我想从我的MainViewModel打开一个新窗口。可以吗?它出现了这个错误。

System.InvalidOperationException
  HResult=0x80131509
  Message=Window must be the root of the tree. Cannot add Window as a child of Visual.
  Source=PresentationFramework

我怀疑这是我的MainView Xaml视图中的行:MvxWpfView

<MenuItem Header="Settings"  mvx:Bi.nd="Command SettingsCommand">
       <MenuItem.Icon>
           <Image Width="16" Height="16" Source="/Images/settings.png"/>
        </MenuItem.Icon>
 </MenuItem>`

在我的Viewmodel中,我从其中调用新窗口的是以下代码:

public class MainViewModel :  MvxViewModel
{
        private readonly IMvxNavigationService navigationService;
        public IMvxCommand SettingsCommand { get; set; }

        public MainViewModel( IMvxNavigationService _navigationService) 
        {
            navigationService = _navigationService;
            GenerateMenu();
            ExitCommand = new MvxCommand(Exit);
            **SettingsCommand = new MvxAsyncCommand(async () => await  navigationService.Navigate<BolusViewModel>()); ** 
        }

}

我尝试作为新窗口打开的ViewModel如下所示:

public class BolusViewModel : MvxViewModel
    {
        
        private readonly IMvxNavigationService navigationService;

        public BolusViewModel(IMvxNavigationService _navigationService)
        { 
            navigationService  = _navigationService;
        }

    }

最后,尝试打开的窗口如下所示:代码隐藏:

[MvxContentPresentation]
          [MvxWindowPresentation(Identifier =  nameof(BolusViewModel), Modal = false)]
          public partial class BolusView : MvxWindow
         {
             public BolusView()
             {
               InitializeComponent();
            
              }

        
          }

XAML:

<views:MvxWindow
                  xmlns:views="clr-          namespace:MvvmCross.Platforms.Wpf.Views;assembly=MvvmCross.Platforms.Wpf"
                   xmlns:mvx="clr-      namespace:MvvmCross.Platforms.Wpf.Binding;assembly=MvvmCross.Platforms.Wpf"
             x:Class="TechnicalToolboxV3.Wpf.BolusView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:Behaviors="http://schemas.microsoft.com/xaml/behaviors"
             xmlns:local="clr-namespace:TechnicalToolboxV3.Wpf"
             xmlns:converters="clr-namespace:TechnicalToolboxV3.Wpf.Converters"
             mc:Ignorable="d" 
             d:DesignHeight="700" d:DesignWidth="1200" FontSize="14" Title="Bolus Controller" Icon="..\Images\Bolus.jpg" Background="#FFBEBEBE" Cursor="{Binding MouseIcon, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}">
    <views:MvxWindow.Resources>
        <converters:SystemColorToSolidBrushConverter x:Key="ColorConvert"/>
    </views:MvxWindow.Resources>
</views:MvxWindow>
bpzcxfmw

bpzcxfmw1#

这似乎是工作...我删除了这些行从我的代码背后的窗口我想打开。

[MvxContentPresentation]
          [MvxWindowPresentation(Identifier =  nameof(BolusViewModel), Modal = false)]

XAMIMAX谢谢你提出这一点,它给了我一个胶水什么我应该寻找,Thanx

相关问题