2016-12-14 64 views
3

在Xamarin.Forms中,我爲ButtonCommandProperty創建了MVVM綁定。Xamarin.Forms:如何避免在MVVM綁定中對字符串進行硬編碼

有沒有辦法避免硬編碼字符串的屬性名稱?

這樣的作品,但我想避免硬編碼字符串:

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

我發現在計算器上展示瞭如何在執行的WinForms類型安全類似的答案,但Xamarin.Forms用途一個不同的綁定引擎。

+0

[如何使數據綁定類型安全並支持重構](http://stackoverflow.com/questions/1329138/how-to-make-databinding-type-safe-and-support-refactoring) –

+1

Great點!它是相似的,但Xamarin.Forms使用不同於WPF的綁定機制 –

+0

很高興知道。我將詳細瞭解它如何在Xamarin上運行 –

回答

6

有兩種方法可以用來實現類型安全,避免在Xamarin.Forms創建MVVM綁定時

第一種方式

參考視圖模型硬編碼字符串和使用nameof代替。

var myViewModel = new MyViewModel(); 
BindingContext = myViewModel; 

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

第二種方式(已取消)

包括視圖模型爲TypeSetBinding方法和使用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密集型操作,導致移動設備性能下降,導致成本很高。

+0

對於我們這些使用xaml進行佈局的人來說,有什麼希望? –

+0

在XAML中創建綁定時,您仍然需要使用硬編碼的字符串。您可以使用x:Name爲XAML屬性創建一個名稱,然後在代碼隱藏中創建類型安全的綁定。 –

相關問題