2014-06-22 59 views
1

我使用3 ViewModel:文件夾,文件夾和項目(文件夾中的文件夾和文件夾中的項目)。MvvmCross Windows Store如何將不同的ViewModel綁定到Appbar?

因此,我使用3 View for這3個ViewModels for Windows Phone應用程序。

然後,我想爲Windows Store創建具有主細節視圖的應用程序,並對這些ViewModel使用1視圖。 我想創建這樣的應用程序:

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

2)像OneNote和Mail Windows應用程序一樣來自Microsoft。

據我所知,我必須使用「自定義演示者」來顯示1視圖上3個ViewModel的數據。

所以,我試圖使用「MvvmCross - 控件導航插件」(https://github.com/ChristianRuiz/MvvmCross-ControlsNavigation)。

MvvmCross Controls Navigation Plugin將2個其他視圖放在UserControls中。 雖然,它很適合我,但是我發現了一個問題(Windows應用商店應用中的Appbar)。

Appbar必須根據用戶選擇的部分更改按鈕。 所以,我需要動態地改變它,並綁定到不同的ViewModels取決於比賽(用戶點擊)。

早期我通過在沒有任何ViewModel的情況下在代碼後面刪除/添加按鈕來完成它。

我可以舉例說明Appbar動態更改取決於上下文: 適用於Windows Store平臺的OneNote應用程序。 Appbar(鏈接)的

實施例:

OneNote Appbar1

OneNote Appbar2

OneNote Appbar3

OneNote Appbar4


是否有可能創建主解尾巴應用程序與mvvmcross?

如果是這樣,那我該怎麼辦呢?

你能暗示我,因爲我找不到任何解決方案嗎?

或者我必須爲Windows Store應用程序創建一個頁面導航(我不想這樣做,因爲我認爲這對我的應用程序不方便)?

或者我必須綁定appbar只有一個(第一個加載的)ViewModel(我認爲這不太方便)?

我也嘗試將Appbar設置爲UserControl,但我不知道它是否會將其綁定到不同的ViewModel,或者如果我將它綁定到AppbarViewModel,我不知道是否會通知其他ViewModel。

無論如何先謝謝了!


更新1

我試圖解決我的問題與Appbar像用戶控件和AppbarViewModel。

此外,我嘗試使用「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 在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與AppBar的ISOPEN = 「true」 和IsSticky = 「真」 屬性解決了這個問題。

更多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」屬性,則問題再次出現。


在此先感謝!

+0

感謝您的問題 - 和更新。我有點迷失在哪裏開始回答這個問題。一個基本的答案是,使用Mvx的主控細節絕對是可能的 - 但它絕對需要一個自定義的演示者(自定義導航服務)。對於appbar,並沒有一個真正的標準答案 - 通常我會逐頁操作它,但如果這不可能,那麼後臺的信使和/或代碼似乎是一個好方法。對不起,我無法正式回答 - 我在這裏沒有標準答案。它的代碼和應用程​​序是國王。 – Stuart

回答

1

我解決了這個問題,改變了Windows Store平臺的「MvvmCross - Controls Navigation Plugin」源代碼。

  • 我爲4個控件(文件夾,文件夾,郵件和設置ViewModel)創建了1個FirstViewModel和4 ViewModel。
  • 然後將所有控件放在FirstView中對應FirstViewModel。
  • 另外我創建了3個AppbarControl,它們對應上面定義的3個ViewModel(文件夾,文件夾和郵件視圖模型)。
  • 然後,我將3個AppbarControl綁定到3個ViewModel(文件夾,文件夾和郵件ViewModel),所以如果我點擊AppbarControl中的按鈕,通訊員ViewModel將處理命令。
  • 我把3個AppbarControl放在Bottum.Appbar中。
  • 我控制哪些AppbarControl必須通過事件的FirstViewModel中的AppbarControl的Visibility屬性顯示(以鼠標點擊爲例)。

我檢查,它似乎工作。

我想聽聽任何改進或其他方法。

Source code on GitHub

相關問題