我正在尝试禁用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,因此没有代码隐藏。 显然,数据网格中的第一项始终是自动选择的,这就是为什么按钮始终处于启用状态,但我仍然不知道我做了什么使第一项始终被选中。
答案 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
替换为名称。