![](/img/trans.png)
[英]Binding viewmodel property to view property in code behind using Prism
[英]Prism VM binding with View within Page code behind
使用Xamarin表單和PCL
我在Page.Xaml中看到了很多有關將VM與View綁定的示例和摘要。
使用這個方塊
xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
prism:ViewModelLocator.AutowireViewModel="True"
還有,如果我想將視圖模型綁定到(Page.cs)后面的頁面代碼中,該怎么辦。
您可以從后面的代碼中訪問ViewMode,只需簡單地對綁定上下文進行類型轉換即可。
var pageViewModel = (PageViewModel)this.BindingContext;
這個對我有用。
在這種情況下,您必須在實例化的類上傳遞兩個參數,因為在構造函數中需要兩個參數。請嘗試以下代碼。
public Page()
{
InitializeComponent();
this.BindingContext = new PageViewModel(Navigation,PageDialogService);
}
您只需新建視圖模型並將其設置為BindingContext。
public Page()
{
InitializeComponent();
this.BindingContext = new MyViewModel();
}
====編輯====
如果您的視圖模型帶有需要依賴注入的參數,並且您想正確地解決它。
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;
}
就我而言
我從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);
}
對我有用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.