MvvmCross WPF - Многооконное приложение (MvxWindow) - PullRequest
0 голосов
/ 14 сентября 2018

Я проверил множество примеров того, «как» создавать приложения WPF с использованием фреймворка MvvmCross.Но пока не показано, как создать многооконное приложение.

Как создать и отобразить независимое окно с собственным ViewModel?

Мои файлы проекта выглядят так:

MainWindow.xaml => MainWindow.xaml.cs

public partial class MainWindow : MvxWindow
{
    public MainWindow()
    {
        InitializeComponent();
    }
}

LoginPageView.xaml => LoginPageView.xaml.cs

public partial class LoginPageView : MvxWpfView
{
    public LoginPageView()
    {
        InitializeComponent();
    }
}

MenuPageView.xaml => MenuPageView.xaml.cs

public partial class MenuPageView : MvxWindow // <-- I want use UserControl (MvxWpfView), and Window (MvxWindow)
{
    public MenuPageView()
    {
        InitializeComponent();
    }
}

Когда я использую класс MvxWindow для MenuPageView, возникает исключение, например ниже.

mvx: Diagnostic: 11,83 Showing ViewModel MenuPageViewModel
mvx: Error: 11,84 Error seen during navigation request to MenuPageViewModel - error InvalidOperationException: Window must be the root element of the tree. The Window element can not be added as a child element of Visual.
in System.Windows.Window.OnAncestorChanged ()
   in System.Windows.FrameworkElement.OnAncestorChangedInternal (TreeChangeInfo parentTreeState)
   in System.Windows.TreeWalkHelper.OnAncestorChanged (DependencyObject d, TreeChangeInfo info, Boolean visitedViaVisualTree)
   in System.Windows.DescendentsWalker`1.StartWalk (DependencyObject startNode, Boolean skipStartNode)
   in MS.Internal.PrePostDescendentsWalker`1.StartWalk (DependencyObject startNode, Boolean skipStartNode)
   in System.Windows.TreeWalkHelper.InvalidateOnTreeChange (FrameworkElement fe, FrameworkContentElement fce, DependencyObject parent, Boolean isAddOperation)
   in System.Windows.FrameworkElement.ChangeLogicalParent (DependencyObject newParent)
   in System.Windows.FrameworkElement.AddLogicalChild (Object child)
   in System.Windows.Controls.ContentControl.OnContentChanged (Object oldContent, Object newContent)
   in System.Windows.Window.OnContentChanged (Object oldContent, Object newContent)
   in System.Windows.Controls.ContentControl.OnContentChanged (DependencyObject d, DependencyPropertyChangedEventArgs e)
   in System.Windows.DependencyObject.OnPropertyChanged (DependencyPropertyChangedEventArgs e)
   in System.Windows.FrameworkElement.OnPropertyChanged (DependencyPropertyChangedEventArgs e)
   in System.Windows.DependencyObject.NotifyPropertyChange (DependencyPropertyChangedEventArgs args)
   in System.Windows.DependencyObject.UpdateEffectiveValue (EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry & newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
   in System.Windows.DependencyObject.SetValueCommon (DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
   in System.Windows.DependencyObject.SetValue (DependencyProperty dp, Object value)
   in MvvmCross.Wpf.Views.Presenters.MvxSimpleWpfViewPresenter.Present (FrameworkElement frameworkElement) in D: \ git \ MvvmCross \ MvvmCross \ Windows \ Wpf \ Views \ Presenters \ MvxSimpleWpfViewPresenter.cs: line 41
   in MvvmCross.Wpf.Views.Presenters.MvxBaseWpfViewPresenter.Show (MvxViewModelRequest request) in D: \ git \ MvvmCross \ MvvmCross \ Windows \ Wpf \ Views \ Presenters \ MvxBaseWpfViewPresenter.cs: line 27
...