我使用带有freshmvvm 框架的xamarin 表单。
我想知道如何跳过使用 xaml,而只是从 c# 中的代码访问绑定数据。
是否有任何代码示例可以提供帮助?
我使用带有freshmvvm 框架的xamarin 表单。
我想知道如何跳过使用 xaml,而只是从 c# 中的代码访问绑定数据。
是否有任何代码示例可以提供帮助?
虽然这违背了 MVVM 的原则,但当然有办法做到这一点。
如果没有 MVVM 框架,您只需手动创建一个 ViewModel 并自己设置BindingContext
(文档)。MVVM 框架为您做的“唯一”事情(就此而言)被设置为自动绑定,因此您不必为一遍又一遍地编写相同的代码而烦恼。
所以,假设你有这个 ViewModel,注意我使用 PageModel 来匹配 FreshMvvm 命名:
// SamplePageModel.cs
public class SamplePageModel
{
public string Foo { get; set; } = "Bar";
}
现在在我的页面中,我像这样设置 BindingContext:
// SamplePage.cs
// ... Skipped code, just constructor here:
public SamplePage()
{
InitializeComponent();
BindingContext = new SamplePageModel();
}
现在您可以绑定到SamplePageModel
.
FreshMvvm 自动完成这部分。如果出于某种原因,您想直接访问 ViewModel/PageModel,只需执行相反的操作。在您的页面或代码隐藏的某处,您可以执行以下操作:
// ... Some code here
var pageModel = BindingContext as SamplePageModel;
// ... More code here
现在,如果pageModel
不null
存在,您就有了数据绑定和填充的 PageModel!
我发现 Gerald 的回答很有帮助,但我发现您需要在页面中覆盖此事件而不是在构造函数中执行as :
protected override void OnBindingContextChanged()
{
base.OnBindingContextChanged();
var pageModel = BindingContext as YourFreshMVVMPageModel;
// Modify the page based on the pageModel
}
PageModel 构造似乎发生在页面构造函数之后,并且此事件似乎在正确的时间触发,并且仍然使页面执行您想要的操作。