使用Xamarin網頁代碼中有景結合形態& PCL棱鏡VM背後
我看到了很多的例子,段關於使用此塊
xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
prism:ViewModelLocator.AutowireViewModel="True"
在Page.Xaml
與景觀結合VM
如果我想在後面的頁面代碼(Page.cs)中綁定視圖模型該怎麼辦。
使用Xamarin網頁代碼中有景結合形態& PCL棱鏡VM背後
我看到了很多的例子,段關於使用此塊
xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
prism:ViewModelLocator.AutowireViewModel="True"
在Page.Xaml
與景觀結合VM
如果我想在後面的頁面代碼(Page.cs)中綁定視圖模型該怎麼辦。
您可以新建viewmodel並將其設置爲BindingContext。
public Page()
{
InitializeComponent();
this.BindingContext = new MyViewModel();
}
==== ==== EDITED
如果您的視圖模型是需要依賴注入參數,要正確地解決它。
App.xaml.cs
protected override void OnInitialized()
{
...
Microsoft.Practices.Unity.UnityContainerExtensions.RegisterType<IMyViewModel, MyViewModel);
...
}
Page.xaml.cs
public Page()
{
InitializeComponent();
var viewModel = Microsoft.Practices.Unity.UnityContainerExtensions.Resolve<IMyViewModel>(((App)Application.Current).Container);
this.BindingContext = viewModel;
}
你必須通過對類兩個參數實例化,因爲你已經需要構造雙參數該案。嘗試下面的代碼。
public Page()
{
InitializeComponent();
this.BindingContext = new PageViewModel(Navigation,PageDialogService);
}
在我的情況
我從page.xaml
xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
prism:ViewModelLocator.AutowireViewModel="True"
和後面的碼內移除(page.cs)
我增加
public Page()
{
InitializeComponent();
this.BindingContext = new pageViewModel(null,null);
}
它爲我工作
但您的NavigationService和PageDialogServer將在視圖模型爲空 – lowleetak
爲空,我同意你在某些頁面_navigationservice有一個值,而在其他的一些它是空的,但仍然適用於這兩種情況下,我希望你嘗試和解釋我。 –
你可以從代碼訪問視圖模式的背後,是通過簡單的類型轉換綁定上下文
var pageViewModel = (PageViewModel)this.BindingContext;
這對我的作品。
因此,如果視圖模型參數爲 PageViewModel(INavigationService navigationService,IPageDialogService pageDialogService) –
在這種情況下,您需要使用依賴注入來解析ViewModel。你可以讓你的App類靜態訪問。然後調用App.Container.Resolve([viewmodel type])。但在此之前,您需要通過調用Container.RegisterType([viewmodel type],viewmodel class) – lowleetak
將視圖模型註冊到Container中,儘管我的Dryioc.Icontainer類型的容器仍然可以使用它。 –