2016-12-14 5 views
3

Xamarin.Formsでは、ButtonCommandPropertyのMVVMバインディングを作成しています。Xamarin.Forms:MVVMバインディングで文字列をハードコーディングすることを避ける方法

プロパティ名の文字列をハードコードしないようにする方法はありますか?

このように動作しますが、私は、文字列をハードコーディング避けたい:

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

私は同様のリサイズに型の安全性を実行する方法を示しStackOverflowの上の答えが、Xamarin.Formsの用途を見つけました別のバインディングエンジン。

+0

[データバインドの種類を安全にしてリファクタリングをサポートする方法]の複製の可能性あり(http://stackoverflow.com/questions/1329138/how-to-make-databinding-type-safe-and-support-refactoring) –

+1

ポイント!それと似ていますが、Xamarin.FormsはWPFとは異なるバインディングメカニズムを使用しています。 –

+0

私はそれがXamarinでどのように機能するかについてもっと詳しくお伝えします –

答えて

6

あなたは型の安全性を実装するために使用し、Xamarin.Formsに

最初の方法

リファレンスビューモデルをMVVMバインディングを作成する際に、文字列をハードコーディング避け、代わりにnameofを使用できる2つの方法があります。

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プロパティの名前をリファクタリングすると、新しい名前は、あなたのビューにまで浸透します! もう一度タイプミスを心配する必要はありません! Xamarin.Formsのv2.3.4のよう

更新、2017年1月23日

、 "第二の方法は、" ジェネリックを使用してデータバインディングを設定し、上記の、推奨されません。 Xamarin.Formsチームは、一般的な方法は最終的に実行時に非ジェネリックな方法に変換されると説明しました。Expression-parsingは高価でCPUを大量に消費するため、モバイルデバイスのパフォーマンスが低下します。

+0

xamlをレイアウトに使用している人にとっては、どんな希望ですか? –

+0

XAMLでバインディングを作成する場合でも、ハードコードされた文字列を使用する必要があります。 x:Nameを使用してXAMLプロパティの名前を作成し、コードビハインドで型セーフなBindingを作成することができます。 –

関連する問題