I have a ListBox ItemTemplate related to the ObservableCollection of my items. I'm currently trying to implement Cut / Copy / Paste / SelectAll (so that it is short, I will just show selectall here ...)
<UserControl.CommandBindings>
<CommandBinding Command="SelectAll" CanExecute="SelectAll_CanExecute" Executed="SelectAll_Executed"/>
</UserControl.CommandBindings>
<ListBox x:Name="listbox"
ItemsSource="{Binding}"
Background="Transparent"
SelectionMode="Extended"
ScrollViewer.VerticalScrollBarVisibility="Auto">
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Command="SelectAll" />
</ContextMenu>
</ListBox.ContextMenu>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Background="Transparent">
<CheckBox Name="cbEnabled" IsChecked="{Binding Enabled, Mode=TwoWay}" Margin="0,2,0,0"/>
<TextBlock Text="{Binding Name}" Padding="5,0,0,0"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
this is codebehind for canececute:
private void SelectAll_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = listbox.Items.Count > 0;
e.Handled = true;
}
When I first run the program and right-click in the list, the Select All context menu is always turned off (and SelectAll_CanExecute is never called) until I select something. Is there a way to make this work as it seems? (and without automatically selecting the first item or forcing the user to do this)
Thank!