1

疑似コードでこの質問をさせてください:

<Window> <ListView ItemsSource="{Binding PersonCollection}"> <ListView.ItemTemplate> <DataTemplate> <StackPanel> <TextBlock Text="{Binding Path=Name}" /> <TextBlock Text="{Binding Path=Age}" /> <TextBlock Text="/" /> <CheckBox Command="{Binding PersonSelectedCommand}" /> <!-- Where "PersonSelectedCommand" is a public command property available in ViewModel object (lets say "Contacts" in this context)--> </StackPanel> </DataTemplate> </ListView.ItemTemplate> </ListView> </Window>

" Contacts
" は、ウィンドウの DataContext として設定された ViewModel オブジェクトです。

「連絡先」には、「PersonCollection」、public ICommand PersonSelectedCommand プロパティがあります。"PersonCollection" はリスト

"Person" には Name、Age プロパティがあります

CheckBox が存在しないオブジェクト "person" の ICommand "PersonSelectedCommand" プロパティを見つけてバインドしようとしているため、現在これは機能していません。

CheckBox をオブジェクト "Contact" の ICommand "PersonSelectedCommand" プロパティにバインドする方法

よろしく
お願いいたします。

4

3 に答える 3

6

SeeSharp の回答は気に入りましたが、質問に直接答えるには、CheckBox の Command バインディングを次のように変更するだけです。

Command="{Binding DataContext.PersonSelectedCommand,
                  RelativeSource={RelativeSource FindAncestor,ListView,1}}"

これは、単に IsSelected プロパティをバインドするだけでなく、より多くの制御が必要な場合にのみ、SeeSharp の回答よりも望ましい方法です。それ以外の場合は、バインディング IsSelected を使用します。

于 2010-06-17T06:34:04.257 に答える
1

ビューモデルを変更できますか? bool プロパティ IsSelected を Person に追加すると、より良いと思います。そしてそれをチェックボックスにバインドします:

<CheckBox IsChecked="{Binding IsSelected}"/>

コマンドは不要で、IsSelected プロパティのセッターにいくつかの機能を追加できます。

于 2010-06-17T06:00:11.347 に答える
0

PersonSelectedCommandPerson スコープ内にある必要があります。したがって、人のリストにバインドすると、コマンドのリストが得られます。したがって、人が選択されるたびに、対応するコマンドが実行されます。

それ以外の場合は、Binding で RelativeSource を使用して祖先を見つけ、PersonSelectedCommand をそのように設定できます。この回答を確認してください:パスが1つ上の「レベル」であるWPFデータバインディングを指定する簡単な方法はありますか?

于 2010-06-17T06:00:35.073 に答える