MVVM Lightを使用していて、リストボックスの各行に「編集」ボタンと名前が表示されるようにデータテンプレートを持つリストボックスがあります。ListBoxのボタンをアイテムが選択されている場合にのみ有効にする
EventToCommand
とRelayCommand
オブジェクトを使用して、ボタンをViewModelに接続することができます。
リストボックス内の項目がボタン上のデータトリガーで選択されるまで、ボタンコントロールを無効にすることもできます。ここにxamlがあります:
<DataTrigger
Binding="{Binding ElementName=lbPlayersList, Path=SelectedItem}"
Value="{x:Null}">
<Setter Property="Button.IsEnabled" Value="False"/>
</DataTrigger>
ここは私の問題です。項目が選択されると、すべてのボタンが有効になります。リスト内の項目1を選択すると、すべてのボタンが有効になります。つまり、項目1が選択されているときに項目2のボタンをクリックすると、項目1の人物がCommandParameterとして渡されます。私が知りたいのですがどのような項目2.
上の人は、次のいずれかを実行する方法がある場合は次のとおりです。
- が有効になって編集ボタンのすべてを残し、およびユーザーが1つをクリックすると、ボタンがクリックされたときに期待される人物アイテムがCommandParameterとして渡されるように、リストボックスのSelectedItemになります。
- すべての[編集]ボタンを無効にし、wリストボックス内の人が選択されると、リストボックスのその行の編集ボタンだけが再び有効になり、目的のユーザーがコマンドのCommandParameterとして渡されます。
おかげで、 スティーブ
UPDATE:このような何かについて何(それが動作していないですが、私はおそらく何か間違ったことをやっています)。
<DataTemplate x:Key="PlayersListTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Button Grid.Column="0" IsEnabled="False" Content="Edit" Margin="4,4,8,4" Height="25" Width="25" FontSize="10" VerticalAlignment="Center">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<GalaSoft_MvvmLight_Command:EventToCommand x:Name="EditButtonClick"
Command="{Binding Source={StaticResource Locator}, Path=Main.TestCommand}"
CommandParameter="{Binding ElementName=lbPlayersList, Path=SelectedItem}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<Button.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="True">
<Setter Property="Button.IsEnabled" Value="True"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" Grid.Row="0">
<TextBlock Text="{Binding LastName}" FontSize="16" FontWeight="DemiBold" />
<TextBlock Text=", " FontSize="16" FontWeight="DemiBold" VerticalAlignment="Center"/>
<TextBlock Text="{Binding FirstName}" FontSize="16" FontWeight="DemiBold" VerticalAlignment="Center"/>
</StackPanel>
<TextBlock Text="{Binding NickName}" Grid.Row="1" FontSize="10" />
</Grid>
</StackPanel>
</Grid>
</DataTemplate>
私が話しています部分は、私はその祖先が(それが属するlistboxitemがする)選択されているかどうかをチェックしてみてください、もしそうであれば、そのボタンを可能にするButton.Style
です。ただし、アイテムが選択されているとき、ボタンは有効になっていません。
UPDATE:何がこのようなものについては(それが動作していないですが、私はをおそらくちょうど何か間違っている)。 私の更新された記事の上のコードを参照してください。 – Haacker