【发布时间】:2011-10-30 10:21:35
【问题描述】:
我有两个我想要启用/禁用的 DataGrid,这取决于在另一个 DataGrid 中是否恰好选择了 1 个元素。在 WPF 中完成这种依赖控制最简单的方法是什么?
【问题讨论】:
标签: wpf dependencies
我有两个我想要启用/禁用的 DataGrid,这取决于在另一个 DataGrid 中是否恰好选择了 1 个元素。在 WPF 中完成这种依赖控制最简单的方法是什么?
【问题讨论】:
标签: wpf dependencies
您可以使用触发器:
<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>
【讨论】:
你可以:
IValueConverter,也许它被称为NotEqualToOneBooleanConverter
IsEnabled从一个DataGrid绑定到另一个SelectedItems.Count
Binding 上的Converter 设置为NotEqualToOneBooleanConverter
这种方法很好,因为一旦创建了转换器,它就可以应用于整个 XAML 以及任何类型和任何属性(不仅仅是 DataGrid 或 SelectedItems.Count)。为了使其更加灵活,您可以使用此转换器的更通用版本,该版本可以比较直接从 XAML 指定的任意两个值(一个来自 Binding,另一个指定为 Converter 上的属性)。
这种方法的缺点 - 它只是 XAML,并且难以测试,尤其是当您试图实现的是业务需求而不仅仅是图形效果时。
希望这会有所帮助!
【讨论】:
这是我的快速破解:
tablesControl.SelectionChanged += (sender, sce) =>
{
var c = tablesControl.SelectedItems.Count;
var orderingPossible = c == 1;
itemsControl.IsEnabled = orderingPossible;
};
【讨论】:
在第一个 Grid 中,当您单击该单元格时会触发一个事件或命令,在这种情况下,您需要有一些 bool 属性,您可以将其设置为 false,然后将 Enabled 属性绑定到此 bool。如果您使用的是 MVVM,这将非常容易,看看这个看看如何 - http://www.youtube.com/watch?v=tKfpvs7ZIyo
【讨论】: