1

XAML:

<HeaderedItemsControl ItemsSource="{Binding FooCollection}">
<HeaderedItemsControl.ItemTemplate>
    <DataTemplate>
        <StackPanel>
            <TextBlock Text={Binding foo}/>
            <Button Command="{Binding DeleteFoo}">Delete</Button>
        </StackPanel>
    </DataTemplate>
</HeaderedItemsControl.ItemTemplate>

この XAML を考えると、ViewModel の DeleteFoo コマンドとメソッドで、FooCollection でクリックされたアイテムへの参照を取得するにはどうすればよいですか? 通常、DataGrid などでは、ViewModel にバインドされた SelectedItem になりますが、厄介なことに、HeaderedItemsControl にはこのオプションがありません。

たとえば CommandArguments を介して、アイテムへの参照、または FooCollection のインデックス位置を渡す別の方法はありますか?

ListView は、selectedItem に相当する同様のコントロールであることは理解していますが、適切にフォーマットされた HeaderedItemsControl (タイトル ヘッダー付き) がセットアップされているので、可能であればそれを捨てる必要はありません。

助けてくれてありがとう。

4

2 に答える 2

2

CommandParameter を介して、各項目の DataContext をコマンドに送信できます。

 <Button Command="{Binding DeleteFoo}" CommandParameter={Binding}>Delete</Button>
于 2013-02-28T14:02:39.527 に答える
2

とにかく答えとして入れます.. ItemsControls は ListItem の DataContext をそれらが表すオブジェクトに設定するので、おそらくクリックされたアイテムへの参照を

<HeaderedItemsControl ItemsSource="{Binding FooCollection}">
<HeaderedItemsControl.ItemTemplate>
    <DataTemplate>
        <StackPanel>
            <TextBlock Text={Binding foo}/>
            <Button Command="{Binding DeleteFoo}" CommandParameter={Binding}>Delete</Button>
        </StackPanel>
    </DataTemplate>
</HeaderedItemsControl.ItemTemplate>
于 2013-02-28T14:03:31.333 に答える