任何人都可以舉一個實現的例子嗎?是否使用ViewModel實現INotifyPropertyChanged
(並引發事件,如在Silverlight中完成)或其他方式? ViewModel如何綁定到視圖?如何在Windows Phone 8.1應用程序(xaml)中實現MVVM?
到目前爲止,我發現的所有示例都不完整或過時(請參閱Silverlight應用程序,而不是 Xaml應用程序)。
任何人都可以舉一個實現的例子嗎?是否使用ViewModel實現INotifyPropertyChanged
(並引發事件,如在Silverlight中完成)或其他方式? ViewModel如何綁定到視圖?如何在Windows Phone 8.1應用程序(xaml)中實現MVVM?
到目前爲止,我發現的所有示例都不完整或過時(請參閱Silverlight應用程序,而不是 Xaml應用程序)。
我目前在自己的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());
}
}
的MainViewModel
有ViewModelBase
作爲基類,並實現了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。
在Windows RT的情況下,我會建議朝PRISM看。它提供了非常好的現代開發實踐。您將獲得合適的導航服務,應用程序生命週期管理,出色的MVVM支持以及非常靈活的視圖和ViewModels解析機制。 您可以通過NuGet輕鬆將其添加到您的項目中。 它有很好的文檔,所以如果你有任何問題,你可以在MSDN找到答案,甚至下載免費的書Prism for the Windows Runtime。我們的團隊在使用PRISM構建項目方面擁有成功的經驗。
謝謝,會檢查出來。 – Arnthor 2014-10-17 12:38:19
如果您有興趣,我在我的博客上有一個[簡單的MVVM示例](http://rachel53461.wordpress.com/2011/05/08/simplemvvmexample/)。正如Abdurrahman所說,MVVM是一種模式,所以無論您使用的是WPF還是Silverlight,模式都是相同的。 – Rachel 2014-10-04 18:28:54
值得研究一些MVVM框架,Caliburn Micro現在支持WP8.1和Universal應用程序。 – 2014-10-05 09:10:01
@HenkHolterman感謝您的建議,將檢查出 – Arnthor 2014-10-05 09:20:58