Я использую MVVM Light, и у меня есть список с шаблоном данных, так что в каждой строке списка отображается кнопка «Изменить» и имя.
Я могу подключить кнопку кViewModel с EventToCommand
и RelayCommand
объектом.
Я также могу отключить управление кнопкой, пока элемент в списке не будет выбран с триггером данных на кнопке.Вот этот xaml:
<DataTrigger
Binding="{Binding ElementName=lbPlayersList, Path=SelectedItem}"
Value="{x:Null}">
<Setter Property="Button.IsEnabled" Value="False"/>
</DataTrigger>
Вот моя проблема.Когда элемент выбран, все кнопки включены.поэтому, если вы выбираете элемент 1 в списке, все кнопки включены, что означает, что вы можете затем нажать кнопку на элементе 2, когда элемент 1 выбран, и тогда человек в элементе 1 передается как CommandParameter вместочеловек по пункту 2.
Я хотел бы знать, есть ли способ выполнить одно из следующих действий:
- оставить ВСЕ кнопки «Правка» включенными, и когдапользователь щелкает один, затем строка, которой он принадлежит, становится SelectedItem списка, гарантируя, что элемент ожидаемого человека передается в качестве CommandParameter при нажатии кнопки
- , отключает все кнопки редактирования, и когдачеловек в списке выбран, только кнопка редактирования для этой строки списка включена, снова, гарантируя, что желаемый пользователь передан в качестве CommandParameter для команды.
Спасибо, Стив
ОБНОВЛЕНИЕ: Как насчет этого (это не работает, но я, вероятно, просто делаю что-то не так).
<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>
Часть, о которой я говорю, находится на Button.Style
, где я бы попытался проверить, выбран ли ее предок (listboxitem, к которому он принадлежит), и если да, то включите эту кнопку.Однако кнопка не активна, когда выбран элемент.