Как я могу включить кнопку внутри отключенного ListboxItem? - PullRequest
0 голосов
/ 23 июня 2019

У меня есть ListBox в Wpf, заполненный ListBoxItems - каждый элемент содержит объект файла и «информационную кнопку». Эти файловые объекты содержат свойства файла, такие как имя файла, путь и т. Д., Но некоторые из этих файлов недействительны, что отмечено флагом.

Я хочу отключить элементы списка, которые содержат недопустимый файл, кроме кнопки информации внутри.

Я успешно отключил весь элемент списка на недопустимых элементах, но это неверно, поскольку каждый файловый объект (независимо от того, является ли он недействительным или нет) содержит определенную информацию о файле. Это может быть показано при нажатии кнопки информации.

Этот код работает хорошо, но в результате все элементы внутри элемента списка отключены. Я хочу, чтобы этот элемент кнопки был включен.

The result as image

И код:

<ListBox x:Name="fileNameListBox" 
                     ItemsSource="{Binding FileListViewModel.FilteredFileList, Mode=TwoWay}"
                     Grid.Row="4" Grid.Column="0" 
                     Margin="0, 0, 0, 5"
                     HorizontalContentAlignment="Left">

            <i:Interaction.Triggers>
                <i:EventTrigger EventName="SelectionChanged">
                    <i:InvokeCommandAction Command="{Binding FileListSelectionChangedCommand}"
                                           CommandParameter="{Binding ElementName=fileNameListBox, Path=SelectedItem}"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>

            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Vertical">
                        <Label Content="{Binding Filename}" FontWeight="Bold"/>
                        <Label Content="{Binding FilePath}" FontWeight="Light" FontSize="10"/>
                        <Button x:Name="infoButton" Width="50" Content="Info" FontWeight="Light" FontSize="14" HorizontalAlignment="Left"
                                Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:FileListView}}, Path=DataContext.FileListViewModel.FileInfoClickedCommand }"
                                CommandParameter="{Binding}" /> <!-- I want this button to be enabled -->
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>

            <ListBox.ItemContainerStyle>
                <Style TargetType="{x:Type ListBoxItem}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsValid}" Value="False">
                            <Setter Property="IsEnabled" Value="False"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ListBox.ItemContainerStyle>
        </ListBox>

Итак, мой вопрос, есть ли способ включить каждую кнопку в этих элементах ListBox? Или я могу сделать это с помощью другого хитрого решения?

...