2014-10-04 114 views
0

任何人都可以舉一個實現的例子嗎?是否使用ViewModel實現INotifyPropertyChanged(並引發事件,如在Silverlight中完成)或其他方式? ViewModel如何綁定到視圖?如何在Windows Phone 8.1應用程序(xaml)中實現MVVM?

到目前爲止,我發現的所有示例都不完整或過時(請參閱Silverlight應用程序,而不是 Xaml應用程序)。

+0

如果您有興趣,我在我的博客上有一個[簡單的MVVM示例](http://rachel53461.wordpress.com/2011/05/08/simplemvvmexample/)。正如Abdurrahman所說,MVVM是一種模式,所以無論您使用的是WPF還是Silverlight,模式都是相同的。 – Rachel 2014-10-04 18:28:54

+0

值得研究一些MVVM框架,Caliburn Micro現在支持WP8.1和Universal應用程序。 – 2014-10-05 09:10:01

+0

@HenkHolterman感謝您的建議,將檢查出 – Arnthor 2014-10-05 09:20:58

回答

3

我目前在自己的Universal/W8.1/WP8.1應用程序中使用以下方法。該方法使用RArcher WinRT Toolkit,這是一個基於MVVM模式的實驗工具包。 它提供了一種維護應用程序狀態的方法,您可以使用ViewModelBase來實現INPC。 它也使用Unity dependency injection container

我想讓ViewModelLocator成爲一個應用程序範圍的資源,所以我的Views可以很容易地訪問它。

<Application.Resources> 
    <vm:ViewModelLocator x:Key="ViewModelLocator" /> 
</Application.Resources> 

視圖可以使用它像這樣:

<Page.DataContext> 
    <Binding Source="{StaticResource ViewModelLocator}" Path="MainViewModel" /> 
</Page.DataContext> 

ViewModelLocator看起來是這樣的:

public sealed class ViewModelLocator 
{ 
    public ViewModelLocator() 
    { 
     RegisterIoCBindings(); 
    } 

    public IMainViewModel MainViewModel 
    { 
     get { return IocContainer.Get<IMainViewModel>(); } 
    } 

    private void RegisterIoCBindings() 
    { 
     IocContainer.Container.RegisterType(typeof(IMainViewModel), typeof(MainViewModel), 
     null, new ContainerControlledLifetimeManager()); 
    } 
} 

MainViewModelViewModelBase作爲基類,並實現了IMainViewModel

public sealed class MainViewModel : ViewModelBase, IMainViewModel 
{ 
    private string myText; 
    [AutoState] 
    public string MyText 
    { 
     get { return myText; } 
     set 
     { 
      myText = value; 
      OnPropertyChanged(); 
     } 
    } 

    public MainViewModel() // You can use constructor injection here 
    {    
    } 
} 

這是基本設置。正如其他人所說的,MVVM是一種模式,並有許多方式來使用它。我會說,使用什麼感覺很好;-)

如果你想知道更多關於這種方法,檢查出工具包和統一DI。

+0

感謝您的詳細解答,我會去檢查一些框架,就像您所描述的那樣。如果沒有辦法讓MVVM開箱即可,我真的很失望。 – Arnthor 2014-10-05 10:51:11

+0

當然你可以自己連線,如果這是你的意思是「開箱即用」。只需在你的視圖模型上實現INPC,就快完成了。 – Kaj 2014-10-05 11:26:40

+0

我會小心使用該ServiceLocator模式。如上所述,框架包含了統一性,因此您不妨將視圖模型注入視圖,而不是讓視圖採用這種依賴性命中。 – MrDosu 2015-02-12 11:46:55

2

沒有區別,它是一樣的。因爲MVVM是一種模式。你可以很容易地實現它到你的Windows Phone應用程序。我爲我的wp應用程序和EventToCommand行爲使用MVVM Light來引發事件。我有一個應用程序開源於GitHub,你可以檢查出來,如果你想。

+0

謝謝,會考慮一下。我喜歡它的標題中的'光'這個詞。 – Arnthor 2014-10-05 10:52:25

4

在Windows RT的情況下,我會建議朝PRISM看。它提供了非常好的現代開發實踐。您將獲得合適的導航服務,應用程序生命週期管理,出色的MVVM支持以及非常靈活的視圖和ViewModels解析機制。 您可以通過NuGet輕鬆將其添加到您的項目中。 它有很好的文檔,所以如果你有任何問題,你可以在MSDN找到答案,甚至下載免費的書Prism for the Windows Runtime。我們的團隊在使用PRISM構建項目方面擁有成功的經驗。

+0

謝謝,會檢查出來。 – Arnthor 2014-10-17 12:38:19

相關問題