gpt4 book ai didi

wpf - MvvmCross:在另一个 View 中查看(或等效于CaliburnMicro Conductor)

转载 作者:行者123 更新时间:2023-12-03 10:31:10 24 4
gpt4 key购买 nike

我对MvvmCross和mvvm模式总体来说还很陌生,所以我开始了一个小型学习项目,并一头扎进了墙。我的应用程序基于一个 MainView 的想法,该 View 包含一个标准Menu和一个子MvxWpfView。首先,此 ChildView 应该是一个简单的 ReadMeView ,但在用户输入时,应切换到另一个 View (上面有实际数据的)。我已经找到了有关此问题的几篇文章,但没有一篇起作用,或者我听不懂。
我的设置:

  • 核心库(.NET Standard 2.0)
  • Wpf应用程序(.NET Core 3.1)

  • 这是我的 MainViewModel ,仍然实现了 this users solution:
    using MvvmCross.Commands;
    using MvvmCross.ViewModels;

    namespace puRGE.Core.ViewModels
    {
    public class MainViewModel : MvxViewModel
    {
    #region Fields -------------------------------------------------------------------------------------
    private HomeViewModel m_homeViewModel = new HomeViewModel();
    #endregion ------------------------------------------------------------------------ Fields endregion


    #region Properties ---------------------------------------------------------------------------------
    public HomeViewModel Home {
    get => m_homeViewModel;
    set => SetProperty(ref m_homeViewModel, value);
    }
    #endregion -------------------------------------------------------------------- Properties endregion


    #region Constructors -------------------------------------------------------------------------------
    public MainViewModel() { }
    #endregion ------------------------------------------------------------------ Constructors endregion


    #region Public methods -----------------------------------------------------------------------------
    public override void Prepare()
    {
    Home = new HomeViewModel();
    }
    #endregion ---------------------------------------------------------------- Public methods endregion
    }
    }
    这是位于我的 MainView (仍然是 this users solution的一部分)内的xaml部分:
    <Menu>
    <!-- Some MenuItems -->
    </Menu>
    <UserControl DataContext="{Binding Home, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
    视觉VS。现实
    image of what I am trying to achieve
    我也尝试过使用 MvxContentPresentation属性,但是老实说,我迷失在 MvvmCross Documentation中的某个位置,这时我几乎要踩到眼袋了。
    <local:HomeView/>
    这也不起作用。即使在 BindingViewModel方法中设置了属性值, Prepare()仍会以这种方式停止工作。我猜像这样调用View会中断某些事件链或某些事件。
    如何在MainView中放置一个View?然后,这个Child能够导航到另一个View,反之亦然(遵循Navigation Documentation)吗?
    编辑_01102020:
    到目前为止,一般的Mvvm方法似乎行不通。
    编辑_02102020:
    Home现在可以导航到SomeOtherViewModel并返回。仍然不知道如何在我的MainView中包含它。

    最佳答案

    在您的MainView.xaml中:

    <Menu>
    <!-- Some MenuItems -->
    </Menu>
    <UserControl DataContext="{Binding Home}">
    <UserControl.Resources>
    <DataTemplate DataType="{x:Type viewModels:ModelAViewModel}">
    <local:ModelAView />
    </DataTemplate>
    <DataTemplate DataType="{x:Type viewModels:ModelBViewModel}">
    <local:ModelBView />
    </DataTemplate>
    </UserControl.Resources>
    <ContentPresenter Content="{Binding}" />
    </UserControl>
    切记在 HomeViewModel中通知您的更改:
    public void ActivateModelAViewModel()
    {
    HomeViewModel = Mvx.IoCProvider.Resolve<ModelAViewModel>();
    //In your HomeViewModel property:
    //RaisePropertyChanged(() => HomeViewModel);
    }

    public void ActivateModelBViewModel()
    {
    HomeViewModel = Mvx.IoCProvider.Resolve<ModelBViewModel>();
    //In your HomeViewModel property:
    //RaisePropertyChanged(() => HomeViewModel);
    }

    关于wpf - MvvmCross:在另一个 View 中查看(或等效于CaliburnMicro Conductor),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64156979/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com