我使用3个ViewModel:文件夹,文件夹和项目(文件夹中的文件夹和文件夹中的项目)。
因此,我将3 View用于Windows Phone应用程序的这3个ViewModel。
然后,我想为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个ViewModels中的数据。
因此,我尝试使用“MvvmCross-控件导航插件”(https://github.com/ChristianRuiz/MvvmCross-ControlsNavigation)。
MvvmCross控件导航插件在UserControls中放置了另外2个 View 。
虽然可以,但我发现了一个问题(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)(我认为这也不方便)?
我也曾尝试将Appbar像UserControl一样放置,但不知道将其绑定(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(Type 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-控件导航插件”的一些源代码。
改进之后,错误“找不到AppbarViewModel的 View ”消失了。
如果我不使用IsSticky =“True”属性,问题将再次出现。
提前致谢!
最佳答案
我通过更改Windows Store平台的“MvvmCross-控件导航插件”的源代码解决了此问题。
我检查了一下,看来还行。
我想听听任何改进或替代方法。
Source code on GitHub。
关于c# - MvvmCross Windows Store如何将不同的ViewModel绑定(bind)到Appbar?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24353609/