2017-12-08 14 views
0

C#で定義されたカスタムViewCellを使用して、Xamarin.FormsのListViewにデータを設定しています。 ViewCellには画像が含まれています。この画像はボタンとして機能し、クリックするとListViewの基礎となるデータを操作できます。CommandParameterをXamarin.FormsのListView項目自体に設定する方法

plusButton.GestureRecognizers.Add(new TapGestureRecognizer() { 
Command = bindingContext.AddProgressToChallengeCommand, 
CommandParameter = new Binding(".")} }); 

をしかし、私はタイプのチャレンジのオブジェクトにアクセスしようとすると、それは私にNullReference例外を与える:私は試してみました

<Image.GestureRecognizers> 
    <TapGestureRecognizer           
     Command="{Binding Path=BindingContext.PlusClickedCommand, Source={x:Reference Name=ChallengesLV}}" 
     CommandParameter="{Binding}"/> 
</Image.GestureRecognizers> 

は基本的に私はのための同等の背後にあるコードを探しています

AddProgressToChallengeCommand = new Command((sender) => doSomething((Challenge)sender)); 

私は、デバッグ中に、送信者オブジェクトを点検:そうのような私のviewmodelでモードでは、path = "。"以外のすべてのプロパティがnullのBinding型のオブジェクトであることがわかります

バインディングが指し示すアイテムを取得するにはどうすればよいですか?ジェイソンへ

+0

Iあなたはコマンドを使用して、タイプチャレンジのパーマを渡す必要があると信じています - 送信者はparmではありません – Jason

+0

あなたは正しいです、私はそれを変更する必要がありました。さらに、私は追加する必要があった myTapGestureRecognizer.SetBinding(TapGestureRecognizer.CommandParameterProperty、 "。"); チップをありがとう! – Jackilion

答えて

0

ありがとう: コマンドのパラメータにアクセスするには、そのように初期化する必要があります

AddProgressToChallengeCommand = new Command<Challenge>((challenge) => 
doSomething(challenge); 

とバインディング、認識のために、私はそれを変更するために必要な:

var recognizer = new TapGestureRecognizer() {Command = bindingContext.AddProgressToChallengeCommand}; 
recognizer.SetBinding(TapGestureRecognizer.CommandParameterProperty, "."); 
plusButton.GestureRegognizers.Add(recognizer); 
関連する問題