簡體   English   中英

Prism VM與后面的Page代碼內的View綁定

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM