【问题标题】:Let one control be enabled/disabled based on another control让一个控件基于另一个控件启用/禁用
【发布时间】:2011-10-30 10:21:35
【问题描述】:

我有两个我想要启用/禁用的 DataGrid,这取决于在另一个 DataGrid 中是否恰好选择了 1 个元素。在 WPF 中完成这种依赖控制最简单的方法是什么?

【问题讨论】:

    标签: wpf dependencies


    【解决方案1】:

    您可以使用触发器:

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

    【讨论】:

      【解决方案2】:

      你可以:

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

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

      这种方法的缺点 - 它只是 XAML,并且难以测试,尤其是当您试图实现的是业务需求而不仅仅是图形效果时。

      希望这会有所帮助!

      【讨论】:

        【解决方案3】:

        这是我的快速破解:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2015-08-03
            • 2015-10-04
            • 1970-01-01
            • 2014-08-30
            • 1970-01-01
            • 2012-11-28
            • 1970-01-01
            • 1970-01-01
            • 2014-12-16
            相关资源
            最近更新 更多