按钮禁用不工作wpf

时间:2017-06-12 22:40:58

标签: wpf xaml button datagrid

我正在尝试禁用xaml中的按钮,如果在数据网格中没有选择任何内容,但它无法正常工作,我无法找出原因。

这是我的xaml代码:

    <DataGrid IsReadOnly="True" x:Name="datagrid" ItemsSource="
     {Binding Path=Notes, UpdateSourceTrigger=PropertyChanged}"  
       IsSynchronizedWithCurrentItem="True" HorizontalAlignment="Left" 
    Margin="0,39,0,0" VerticalAlignment="Top" Height="175" Width="300" AutoGenerateColumns="False">
        <DataGrid.ColumnHeaderStyle>
            <Style TargetType="DataGridColumnHeader">
                <Setter Property="FontSize" Value="14"/>
            </Style>
        </DataGrid.ColumnHeaderStyle>
        <DataGrid.Columns>
            <DataGridTextColumn Header="Title"  Binding="{Binding Title}"/>
            <DataGridTextColumn Header="Content" Binding="{Binding Content}"/>
        </DataGrid.Columns>
    </DataGrid>
    <Button Content="Edit" HorizontalAlignment="Left" Margin="218,9,0,0" VerticalAlignment="Top" Width="70" Height="25"
            Command="{Binding editCommand}">
        <Button.Style>
            <Style TargetType="Button">
                <Setter Property="IsEnabled" Value="True" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=datagrid, Path=SelectedItem}" Value="{x:Null}">
                        <Setter Property="IsEnabled" Value="False" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
        <Button.CommandParameter>
            <MultiBinding Converter="{StaticResource multiCloner}">
                <Binding Path="SelectedItem" ElementName="datagrid"/>
            </MultiBinding>
        </Button.CommandParameter>
    </Button>

如果有人可以提供帮助,我会很感激。

编辑:我使用的是MVVM,因此没有代码隐藏。 显然,数据网格中的第一项始终是自动选择的,这就是为什么按钮始终处于启用状态,但我仍然不知道我做了什么使第一项始终被选中。

3 个答案:

答案 0 :(得分:1)

我明白了。我刚刚删除了

          IsSynchronizedWithCurrentItem="True" 

一切正常。

答案 1 :(得分:0)

您的按钮命令绑定可能会产生干扰。按钮绑定的Command具有基于ICommand接口的CanExecute()函数。这会根据CanExecute()的真/假返回自动启用和禁用按钮。你可以暂时取出命令,看看这是否是罪魁祸首 - 我怀疑它是什么。然后,如果你想保留命令,你可以将命令CanExecte()返回值基于datagrid SelectedItem!= null,你根本不需要按钮IsEnabled。

答案 2 :(得分:-2)

不要使用所有这些setter属性,而是尝试将这些东西放在代码隐藏中。

if (Nothing Selected In Datagrid)
{
Button1.IsEnabled = false;
}
else
{
Button1.IsEnabled = true;
}

同时确保将按钮命名并将Button1替换为名称。