Prism VM与页面代码中的View绑定

时间:2017-07-09 12:23:05

标签: c# xamarin xamarin.forms

使用Xamarin Forms& PCL

我看到了很多关于在Page.Xaml中将VM与View绑定的示例和片段

使用此块

xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
      prism:ViewModelLocator.AutowireViewModel="True"

如果我想在页面代码(Page.cs)中绑定视图模型该怎么办。

4 个答案:

答案 0 :(得分:3)

您可以通过对绑定上下文进行类型转换来从后面的代码访问ViewMode

var pageViewModel = (PageViewModel)this.BindingContext;

它对我有用。

答案 1 :(得分:2)

那种情况你必须在实例化的类上传递both参数,因为你在构造函数中需要两个参数。尝试下面的代码。

 public Page()
{
    InitializeComponent();
    this.BindingContext = new PageViewModel(Navigation,PageDialogService);
}

答案 2 :(得分:0)

您只需修改viewmodel并将其设置为BindingContext。

public Page()
{
    InitializeComponent();
    this.BindingContext = new MyViewModel();
}

==== EDITED ====

如果您的viewmodel带有需要依赖注入的参数,并且您想要正确解析它。

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;
}

答案 3 :(得分:0)

就我而言

我从page.xaml

中删除了
     xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
  prism:ViewModelLocator.AutowireViewModel="True"

并在代码Behind(page.cs)

我添加了

    public Page()
    {
          InitializeComponent();
          this.BindingContext = new pageViewModel(null,null);
    }

它对我有用