以下のように Command と CommandParameter を使用して ListView コントロールの行を削除したいと思います。
<GridViewColumn Header="X">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding CriteriaId}"/>
<Button Name="btnDeleteCriterion" Tag="{Binding CriteriaId}" Content="{Binding CriteriaId}" Foreground="Red" FontWeight="Bold"
Command="{Binding DeleteCriterionCommand}"
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType=ListView}}"
CommandParameter="{Binding RelativeSource={RelativeSource self}, Path=Tag}"
/>
<StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
Button の Tag プロパティを取得して、上記のように Command に渡し、リストから削除しようとしています。
XAMLの上で編集し、ボタンのタグとコンテンツと同じバインディングを使用するTextBlockを追加しましたが、どういうわけかボタンは値を取得しませんが、TextBlockは取得します!?
public void DeleteCriterion(object criterionId)
{
int crtId = (int)criterionId;
Criterion crt = _criteria.FirstOrDefault((c) => c.CriterionId == crtId);
if (crt != null)
_criteria.Remove(crt);
}
しかし、私は常に criteriaId パラメータを null として取得します。
私は何を間違っていますか?