我想只在我的两个数据网格都选择了项目时才启用按钮。现在,当任一数据网格都有选择时,它就会启用。有什么想法吗?
<Button x:Name="button" Content="Z" Grid.Column="1" Margin="0,240,0,0" VerticalAlignment="Top" FontFamily="Wingdings 3" FontSize="21.333" ToolTip="Set the selected alarm for the selected alarm time">
<Button.Style>
<Style TargetType="Button">
<Setter Property="IsEnabled" Value="True" />
<Setter Property="Opacity" Value="1" />
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ElementName=alarmProfilesDataGrid, Path=SelectedItem}" Value="{x:Null}"/>
<Condition Binding="{Binding ElementName=alarmFilesDataGrid, Path=SelectedItem}" Value="{x:Null}"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="IsEnabled" Value="False" />
<Setter Property="Opacity" Value=".5" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
答案 0 :(得分:5)
以下是您的代码: 当任一数据网格都有选择时,不是两个条件都成立,只有当两个数据网格都没有选择时才满足条件。
当程序启动时,两个datagrid都为空,因此满足您的条件。现在,如果您在任一网格中进行选择,则您的条件永远不会得到满足,且DB::table('yourTable')
->where('request_id', '=', '1')
->where(function($query)
{
$query->where('sender_id', '=', 11)
->orWhere('receiver_id', '=', '11');
})
->get();
的值仍为IsEnabled
,即原始值。
要解决此问题,您需要一个转换器:
True
和
public class NotNullToBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
bool result = value == null ? false : true;
return result;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
答案 1 :(得分:0)
我认为正确的方法是使用Property绑定和带有CanExecute条件的Command,它绑定到Button。
public RelayCommand SaveCommand { get; set; }
SaveCommand = new RelayCommand();
SaveCommand.Action = () => { Save(SelectedObject1,SelectedObject2); };
SaveCommand.CanExecute = () => { SelectedObject1 != null && SelectedObject2 != null) };
XAML:
<DataGrid SelectedItem="{Binding Path=SelectedObject1}">
</DataGrid>
<DataGrid SelectedItem="{Binding Path=SelectedObject2}">
</DataGrid>
<Button Context="Save" Command="{Binding SaveCommand}/>
仅当从每个网格中选择两个对象时,才会启用该按钮。
PS:此代码无效,但您可以在SO上找到如何使用RelayCommand。请在SO上搜索一些RelayCommand实现。