Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF多数据触发器和条件_C#_Wpf_Datagrid_Multidatatrigger - Fatal编程技术网

C# WPF多数据触发器和条件

C# WPF多数据触发器和条件,c#,wpf,datagrid,multidatatrigger,C#,Wpf,Datagrid,Multidatatrigger,我只想在我的两个数据网格都选择了项目时启用按钮。现在,当任何一个数据网格都有选择时,它被启用。有什么想法吗 <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

我只想在我的两个数据网格都选择了项目时启用按钮。现在,当任何一个数据网格都有选择时,它被启用。有什么想法吗

<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>

以下是您的代码发生的情况: 当两个数据网格都有选择时,这两个条件都不是真的,而是只有当两个数据网格都没有选择时,才满足这些条件

当程序启动时,两个数据网格都为空,因此满足您的条件。现在,如果您在任一网格中进行选择,则您的条件永远不会满足,
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;
    }
}


我认为正确的方法是使用属性绑定和带有绑定到按钮的CanExecute条件的命令

public RelayCommand SaveCommand { get; set; }

SaveCommand = new RelayCommand();
SaveCommand.Action = () => { Save(SelectedObject1,SelectedObject2); };
SaveCommand.CanExecute = () => { SelectedObject1 != null && SelectedObject2 != null) };
XAML:



也许您应该尝试使用wpf命令。
public RelayCommand SaveCommand { get; set; }

SaveCommand = new RelayCommand();
SaveCommand.Action = () => { Save(SelectedObject1,SelectedObject2); };
SaveCommand.CanExecute = () => { SelectedObject1 != null && SelectedObject2 != null) };
<DataGrid SelectedItem="{Binding Path=SelectedObject1}">
</DataGrid>
<DataGrid SelectedItem="{Binding Path=SelectedObject2}">
</DataGrid>
<Button Context="Save" Command="{Binding SaveCommand}/>