在xamarin.forms中,我正在为Button
的CommandProperty
创建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>