簡體   English   中英

MvvmCross Windows Store如何將不同的ViewModel綁定到Appbar?

[英]MvvmCross Windows Store How to bind different ViewModels to Appbar?

我使用3 ViewModel:文件夾,文件夾和項目(文件夾中的文件夾和文件夾中的項目)。

因此,我將3 View用於Windows Phone應用程序的這3個ViewModel。

然后,我想為Windows應用商店創建具有主詳細信息視圖的應用程序,並為這些ViewModel使用1視圖。 我想像這里創建應用程序:

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

2)與Microsoft的OneNote和Mail Windows Store應用類似。

我了解,我必須使用“自定義演示者”在1個視圖上顯示3個ViewModels中的數據。

因此,我嘗試使用“ MvvmCross-控件導航插件”( https://github.com/ChristianRuiz/MvvmCross-ControlsNavigation )。

MvvmCross控件導航插件在UserControls中放置了另外2個視圖。 雖然可以,但我發現了一個問題(Windows應用商店中的Appbar)。

Appbar必須根據用戶選擇的部分更改按鈕。 因此,我需要動態更改它並綁定到不同的ViewModel,具體取決於contecst(用戶單擊)。

早些時候,我通過在代碼后面刪除/添加按鈕來實現它,而沒有任何ViewModel。

我可以舉一個Appbar依賴於上下文動態變化的示例:Windows Store平台的OneNote應用程序。

應用欄示例(鏈接):

OneNote Appbar1

OneNote Appbar2

OneNote Appbar3

OneNote Appbar4


是否可以使用mvvmcross創建主要詳細信息應用程序?

如果是,那我該怎么辦?

您能提示我,因為我找不到任何解決方案嗎?

還是我必須為Windows Store應用程序創建一頁導航(我不想這樣做,因為我認為這對我的應用程序不方便)?

或者我必須僅將appbar與一個(首先加載的)ViewModel綁定(我認為這也不方便)?

我也曾嘗試將Appbar像UserControl一樣放置,但我不知道將其綁定到其他ViewModel上很熱,或者如果我將其綁定到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:在Cirrious.MvvmCross.WindowsStore.Views.MvxStoreViewPresenter.Show(Cirrious.MvvmCross.Views.MvxViewsContainer.GetViewType(Type viewModelType)處找不到PortableTasks.ViewModels.AppbarViewModel的視圖)

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的視圖”消失了。 如果我不使用IsSticky =“ True”屬性,問題將再次出現。


提前致謝!

我通過更改Windows Store平台的“ MvvmCross-控件導航插件”的源代碼解決了此問題。

  • 我為4個控件(文件夾,文件夾,郵件和設置ViewModel)創建1個FirstViewModel和4個ViewModel。
  • 然后將所有與FirstViewModel相對應的控件放入FirstView中。
  • 我還創建了3個AppbarControl,它們對應於上面定義的3個ViewModel(文件夾,文件夾和郵件ViewModel)。
  • 然后,我將3個AppbarControl綁定到3個ViewModels(文件夾,文件夾和郵件ViewModel),因此,如果我單擊AppbarControl中的按鈕,對應的ViewModel將處理命令。
  • 我在Bottum.Appbar中放了3個AppbarControl。
  • 我通過事件來控制必須由FirstViewModel中的AppbarControl的Visibility屬性顯示哪個AppbarControl(例如鼠標單擊)。

我檢查了一下,看來還行。

我想聽聽任何改進或替代方法。

GitHub上的源代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM