繁体   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