gpt4 book ai didi

c# - MvvmCross Windows Store 如何将不同的 ViewModel 绑定(bind)到 Appbar?

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

我使用 3 ViewModel:文件夹、文件夹和项目(文件夹中的文件夹和文件夹中的项目)。

所以,我为这 3 个 ViewModels for Windows Phone 应用程序使用了 3 个 View。

然后,我想为 Windows 应用商店创建具有主详细信息 View 的应用程序,并为这些 ViewModel 使用 1 个 View 。
我想在这里创建应用程序:

1) http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh758322.aspx );

2) 喜欢 Microsoft 的 OneNote 和 Mail Windows Store 应用程序。

我了解,我必须使用“自定义演示者”在 1 个 View 上显示来自 3 个 ViewModel 的数据。

所以,我尝试使用“MvvmCross - 控制导航插件”(https://github.com/ChristianRuiz/MvvmCross-ControlsNavigation)。

MvvmCross Controls Navigation Plugin 将另外 2 个 View 放在 UserControls 中。
我虽然,它很适合我,但我发现了一个问题(Windows Store 应用程序中的 Appbar)。

Appbar 必须根据用户选择的部分更改按钮。
因此,我需要动态更改它并绑定(bind)到不同的 ViewModel,这取决于 contecst(用户点击)。

早期我通过在没有任何 ViewModel 的代码中删除/添加按钮来做到这一点。

我可以举一个 Appbar 动态变化的例子,具体取决于上下文:
适用于 Windows Store 平台的 OneNote 应用程序。

应用栏示例(链接):

OneNote Appbar1

OneNote Appbar2

OneNote Appbar3

OneNote Appbar4

是否可以使用 mvvmcross 创建主详细信息应用程序?

如果是,那我该怎么做?

你能提示我吗,因为我找不到任何解决方案?

或者我必须为 Windows Store 应用程序创建一页导航(我不想这样做,因为我认为这对我的应用程序不方便)?

或者我必须仅将 appbar 与一个(第一次加载的)ViewModel 绑定(bind)(我认为这也不方便)?

我也尝试过像UserControl一样放置Appbar,但是我不知道如何将它绑定(bind)到不同的ViewModel,或者如果我将它绑定(bind)到AppbarViewModel,我不知道如何将它通知其他ViewModel。

无论如何提前谢谢!

更新 1

我试图用像 UserControl 和 AppbarViewModel 这样的 Appbar 来解决我的问题。

我还尝试使用“MvvmCross Messenger 插件”来通知其他 ViewModel 按钮事件,这是在 appbar 中引发的。

链接到 MvvmCross Messenger 插件:
https://github.com/MvvmCross/MvvmCross/wiki/MvvmCross-plugins#messenger

现在,我又遇到了 Page.BottomAppBar 的问题。

我创建 AppbarControl 和 AppbarViewModel。

1)当我把 AppbarControl 放在 Page.BottomAppBar 中时:

<Page.BottomAppBar>
<AppBar>
<controls:AppbarControl></controls:AppbarControl>
</AppBar>
</Page.BottomAppBar>

我收到这样的错误:

在向 AppbarViewModel 发出导航请求期间出现错误 - 错误 KeyNotFoundException:找不到 PortableTasks.ViewModels.AppbarViewModel 的 View
在 Cirrious.MvvmCross.Views.MvxViewsContainer.GetViewType(类型 viewModelType)
在 Cirrious.MvvmCross.WindowsStore.Views.MvxStoreViewPresenter.Show(MvxViewModelRequest 请求)

2)当我没有将 AppbarControl 放在 Page.BottomAppBar 中并将其放在页面中的其他位置时,如下所示:
<controls:AppbarControl Grid.Row="2"></controls:AppbarControl>

然后它运行良好,但不方便控制 IsOpen=true/false Appbar,当用户使用鼠标右键单击时。

如何克服这个问题?

更新 2

我几乎用 AppBar 的 IsOpen="True"和 IsSticky="True"属性解决了 AppBar 的问题。

更多关于 IsSticky 属性的信息: issticky

Xaml 代码如下:
<Page.BottomAppBar>        
<AppBar IsOpen="True" IsSticky="True">
<controls:AppbarControl></controls:AppbarControl>
</AppBar>
</Page.BottomAppBar>

AppbarControl 在哪里:
<controls:MvxStoreControl xmlns:controls="using:MupApps.MvvmCross.Plugins.ControlsNavigation.WindowsStore">
<Grid >
<StackPanel Orientation="Horizontal">
<AppBarButton/>
<AppBarButton/>
</StackPanel>
</Grid>
</controls:MvxStoreControl>

我还更改了“MvvmCross - Controls Navigation Plugin”的一些源代码。
改进后,“找不到 AppbarViewModel 的 View ”错误消失。
如果我不使用 IsSticky="True"属性,问题会再次出现。

提前致谢!

最佳答案

我通过更改 Windows Store 平台的“MvvmCross - Controls Navigation Plugin”源代码解决了这个问题。

  • 我为 4 个控件(文件夹、文件夹、邮件和设置 ViewModel)创建了 1 个 FirstViewModel 和 4 个 ViewModel。
  • 然后将所有与FirstViewModel对应的Controls放入FirstView中。
  • 我还创建了 3 个 AppbarControl,它们对应于上面定义的 3 个 ViewModel(文件夹、文件夹和邮件 ViewModel)。
  • 然后我将 3 个 AppbarControl 绑定(bind)到 3 个 ViewModel(文件夹、文件夹和邮件 ViewModel),因此如果我单击 AppbarControl 对应的 ViewModel 中的按钮,将处理命令。
  • 我在 Bottum.Appbar 中放了 3 个 AppbarControl。
  • 我通过事件控制 FirstViewModel 中 AppbarControl 的 Visibility 属性必须显示哪个 AppbarControl(以鼠标单击为例)。

  • 我检查了,它似乎工作。

    我想听听任何改进或替代方法。

    Source code on GitHub .

    关于c# - MvvmCross Windows Store 如何将不同的 ViewModel 绑定(bind)到 Appbar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24353609/

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