让一个控件基于另一个控件启用/禁用

时间:2011-10-30 10:21:35

标签: wpf dependencies

根据是否在另一个DataGrid中选择了1个元素,我想要启用/禁用两个DataGrid。在WPF中完成此依赖项控制的最简单方法是什么?

4 个答案:

答案 0 :(得分:2)

您可以使用触发器:

    <DataGrid.Style>
        <Style TargetType="DataGrid">
            <Setter Property="IsEnabled" Value="False"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding SelectedItems.Count,
                                               ElementName=datagrid1}"
                            Value="1">
                    <Setter Property="IsEnabled" Value="True"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.Style>

答案 1 :(得分:1)

你可以:

  • 创建IValueConverter,也许称为NotEqualToOneBooleanConverter
  • IsEnabled从一个DataGrid绑定到另一个SelectedItems.Count
  • 将此Converter上的Binding设置为NotEqualToOneBooleanConverter

这种方法很不错,因为一旦创建了转换器,它就可以应用于整个XAML以及任何类型和任何属性(不只是DataGridSelectedItems.Count)。为了使其更加灵活,您可以使用此转换器的更通用版本,可以比较直接从XAML指定的任何两个值(一个来自Binding,另一个来自Converter上指定的属性)。

这种方法的缺点 - 它只是XAML,并且很难测试,特别是如果你想要实现的是业务需求而不仅仅是图形效果。

希望这有帮助!

答案 2 :(得分:0)

这是我的快速黑客:

    tablesControl.SelectionChanged += (sender, sce) =>
    {
        var c = tablesControl.SelectedItems.Count;
        var orderingPossible = c == 1;
        itemsControl.IsEnabled = orderingPossible;
    };

答案 3 :(得分:0)

在第一个Grid中,当您单击该单元格时会触发一个事件或Command,在这种情况下,您需要将某个bool属性设置为false,然后将Enabled属性绑定到此bool。如果您使用MVVM,这将非常简单,请查看如何 - http://www.youtube.com/watch?v=tKfpvs7ZIyo