我如何在ListBox样式上从DataTrigger更改按钮的IsEnabled属性?

时间:2017-09-22 14:17:54

标签: c# wpf xaml listbox

如何在ListBox样式上从DataTrigger更改按钮的IsEnabled属性?我尝试了很多选择,同样,我也没有解决方案。

<Style TargetType="ListBox">
            <Style.Triggers>
                <DataTrigger Binding="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=Items.Count}" Value="0">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate>
                                <Border BorderThickness="0 0 0.55 0.55" BorderBrush="black" Margin="0 0 0 5">
                                    <TextBlock Foreground="Black" Text="Нет студентов" Margin="20" FontSize="11"></TextBlock>
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
</Style>

<Grid x:Name="gridButtons" Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="0.1*" />
                <ColumnDefinition Width="0.1*" />
                <ColumnDefinition Width="0.1*" />
                <ColumnDefinition Width="0.2*" />
            </Grid.ColumnDefinitions>
            <Button Command="{Binding AddCommand}" Grid.Column="0">
                <Image Source="Resources/icons/add-icon.png"></Image>
            </Button>
            <Button Command="{Binding RemoveCommand}" CommandParameter="{Binding SelectedStudent}" Grid.Column="1">
                <Image Source="Resources/icons/delete-icon.png"></Image>
            </Button>
            <Button x:Name="btnSave" Command="{Binding SaveCommand}" Grid.Column="2">
                <Image Source="Resources/icons/save-icon.png"></Image>
            </Button>
            <Button Command="{Binding RefreshCommand}" Grid.Column="3">
                <Image Source="Resources/icons/refresh-icon.png"></Image>
            </Button>
        </Grid>

我需要当ListBox项目计数为0时,btnSave的属性IsEnabled为True。

我做了所有,因为mm8给我写了,但仍然没有用。

我做了什么?

&#13;
&#13;
<ListBox x:Name="lbStudents" Grid.Column="0" AlternationCount="2" BorderThickness="0 0 1 1" BorderBrush="black" Margin="0 0 0 5" ItemsSource="{Binding Students}"
                     SelectedItem="{Binding SelectedStudent}" SelectionMode="Single">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Name="stpListBoxItem" Margin="4 7 4 7">
                            <TextBlock>
                                <TextBlock.Text>
                                    <MultiBinding StringFormat=" {0} {1}">
                                        <Binding Path="LastName"/>
                                        <Binding Path="FirstName"/>
                                    </MultiBinding>
                                </TextBlock.Text>
                            </TextBlock>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
</ListBox>

<Button x:Name="btnSave" Command="{Binding SaveCommand}" Grid.Column="2">
                    <Image Source="Resources/icons/save-icon.png"></Image>
                    <Button.Style>
                        <Style TargetType="Button">
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding Items.Count, ElementName=lbStudents}" Value="0">
                                    <Setter Property="IsEnabled" Value="True" />
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </Button.Style>
</Button>
&#13;
&#13;
&#13;

我花了很多时间来解决这个问题,但仍然没有找到解决方案。抱歉我的英语不好。

1 个答案:

答案 0 :(得分:1)

  

如何在ListBox样式上从DataTrigger更改按钮的IsEnabled属性?

你不能。 Setter ListBox中的Style只能设置ListBox所适用的Style的属性。

您可以将Style应用于绑定到Button的属性的ListBox,但是:

<Button x:Name="btnSave" Command="{Binding SaveCommand}" Grid.Column="2">
    <Image Source="Resources/icons/save-icon.png"></Image>
    <Button.Style>
        <Style TargetType="Button">
            <Setter Property="IsEnabled" Value="False" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Items.Count, ElementName=listBox}" Value="0">
                    <Setter Property="IsEnabled" Value="True" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

这仅适用于ListBox的{​​{1}}&#34; listBox&#34;与x:Name具有相同的命名范围。

当您的Button属性false属性CanExecute属性时,您真正应该从SaveCommand ItemsSource方法返回ListBox必须有0的计数。