我使用xamarin表单和freshmvvm框架。
我想知道如何跳过使用xaml,只需从c#中的代码中访问绑定数据。
是否有任何可以提供帮助的代码示例?
答案 0 :(得分:6)
虽然这违背了MVVM的原则,但当然有办法实现。
如果没有MVVM框架,您只需手动创建ViewModel并自己设置BindingContext
(documentation)。只有'事情(关于这一点)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!
答案 1 :(得分:3)
我发现Gerald的回答很有帮助,但我发现您需要在页面中覆盖此事件,而不是在构造函数中将作为:
protected override void OnBindingContextChanged()
{
base.OnBindingContextChanged();
var pageModel = BindingContext as YourFreshMVVMPageModel;
// Modify the page based on the pageModel
}
PageModel构造似乎发生在页面构造函数之后,并且此事件似乎在正确的时间触发并仍然使页面执行您想要的操作。