Xamarin.Forms:如何避免在MVVM绑定中硬编码字符串



在xamarin.forms中,我正在为ButtonCommandProperty创建MVVM绑定。

有没有办法避免对属性名称进行硬编码?

这种方式有效,但我想避免用力编码一个字符串:

var submitButton = new Button();
submitButton.SetBinding(Button.CommandProperty, "SubmitButtonPressed");

我在stackoverflow上找到了类似的答案,这些答案显示了如何在Winforms中执行类型安全,但是Xamarin.forms使用了不同的绑定引擎。

在xamarin.forms

中创建MVVM绑定时,您可以使用两种方法来实现类型安全并避免硬编码字符串。

第一条方法

引用视图模型并改用nameof

var myViewModel = new MyViewModel();
BindingContext = myViewModel;
var submitButton = new Button();
submitButton.SetBinding(Button.CommandProperty, nameof(MyViewModel.SubmitButtonPressed));

第二条路(已弃用)

将视图模型作为SetBinding方法的Type,并使用Func

var myViewModel = new MyViewModel();
BindingContext = myViewModel;
var submitButton = new Button();
submitButton.SetBinding<MyViewModel>(Button.CommandProperty, vm => vm.SubmitButtonPressed);

使用此技术时,如果您重构视图模型中的SubmitButtonPressed 属性名称,则新名称将渗透到您的视图上!您不必再担心错字了!

更新,2017年1月23日

与xamarin.forms v2.3.4一样,"第二路"上面列出的是,使用仿制药设置数据绑定,已弃用。Xamarin.Forms团队向我解释说,通用方式最终被转换为运行时的非传播方式,这会引起巨大的成本,因为表达式良好是一种昂贵的,CPU密集型的操作,导致移动设备上的性能降级。<<<<<<<<<<<<<<<<<<<<<<<<<<<</p>

最新更新