ユーザーコントロールに次のリストビューがあります。行全体にダブルクリックを登録したいと思います。ICommand
ダブルクリックが登録されたら、ビュー モデルで呼び出したいと思います。
誰も私がこれを行う方法を知っていますか?
これに関する他の投稿があることを知っており、それらにある解決策を試しました (MVVM Light と AttachedCommandBehavior の両方を使用) が、ダブルクリックが単に登録されていないか、TVSeries
私のモデルであるオブジェクトでICommand を呼び出そうとします。行に表示されるデータを保持します。
これは私のリストビューです:
<ListView Height="456"
HorizontalAlignment="Left"
Margin="12,12,0,0"
VerticalAlignment="Top"
Width="488"
ItemsSource="{Binding Path=Library}"
SelectedItem="{Binding Path=SelectedTVSeries}">
<ListView.View>
<GridView>
<GridViewColumn Header="Name"
Width="Auto">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name}"
FontWeight="Bold" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Year"
Width="Auto">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Year}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Genre"
Width="Auto">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Genre}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
アップデート
AttachedCommandBehaviorを使用すると、次のエラーが発生します。
NullReferenceException は処理されませんでした
オブジェクト参照がオブジェクト インスタンスに設定されていません。
エラーは次の行で発生します (AttachedCommandBehavior の一部です)。
/// <summary>
/// Executes the strategy
/// </summary>
public void Execute()
{
strategy.Execute(CommandParameter);
}
私は以下のようにACBを使用しています。まず、ListViewItem のスタイルを宣言します。
<-- 言語: xml -->
<UserControl.Resources>
<Style x:Key="LibraryListViewItemStyle"
TargetType="{x:Type ListViewItem}">
<Setter Property="acb:CommandBehavior.Event" Value="MouseDoubleClick" />
<Setter Property="acb:CommandBehavior.Action" Value="{Binding RelativeSource={RelativeSource AncestorType=ListView}, Path=DataContext.TVSeriesDoubleClickedCommand}" />
<Setter Property="acb:CommandBehavior.CommandParameter" Value="{Binding }" />
</Style>
</UserControl.Resources>
次にItemContainerStyle
、リスト ビューをスタイルに設定します。
<ListView Height="456"
HorizontalAlignment="Left"
Margin="12,12,0,0"
VerticalAlignment="Top"
Width="488"
ItemsSource="{Binding Path=Library}"
SelectedItem="{Binding Path=SelectedTVSeries}"
ItemContainerStyle="{StaticResource LibraryListViewItemStyle}">
...
</ListView>
これを修正する方法を知っている人はいますか?これは本当に私が行った中で最も近いものです。
** 更新: 解決策**
アクションを期待するように AttachedCommandBehavior を構成しましたが、コマンドを実装したため、上記のエラーが発生しました。以下からの変更
<Setter Property="acb:CommandBehavior.Action" Value="{Binding RelativeSource={RelativeSource AncestorType=ListView}, Path=DataContext.TVSeriesDoubleClickedCommand}" />
以下へ
<Setter Property="acb:CommandBehavior.Command" Value="{Binding RelativeSource={RelativeSource AncestorType=ListView}, Path=DataContext.TVSeriesDoubleClickedAction}" />
それはエラーを解決しました。
ただし、アクションを使用する方が好きであることがわかったのでacb:CommandBehavior.Action
、実装を維持して変更しました。
public Action<object> TVSeriesDoubleClickedAction
{
get
{
return new Action<object>(tvSeries => Console.WriteLine("*** Double clicked fired: {0}", ((TVSeries)tvSeries).Name));
}
}