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