我有DataGrid
绑定List<T>
,这是结构:
<DataGrid x:Name="myDataGrid"
ItemSource="{Binding myList}" />
我只想在有myDataGrid
项时才启用按钮,实际上只有当用户以这种方式选择了某个项目时我才能启用该按钮:
<Button>
<Button.Style>
<Style TargetType="Button">
<Setter Property="IsEnabled" Value="True" />
<Setter Property="Opacity" Value="1" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=SelectedItem, ElementName=myDataGrid}" Value="{x:Null}">
<Setter Property="IsEnabled" Value="False" />
<Setter Property="Opacity" Value=".5" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
我该怎么做?
答案 0 :(得分:0)
给我一个按钮的名称:
<Button x:Name="myBTN"> ...
创建一个检查并启用或禁用按钮的方法:
void CheckList()
{
if(list.Count == 0)
{
myBTN.IsEnabled = false;
}
else
myBTN.IsEnabled = true;
}
现在每次调用myList.add()或myList.remove()时,都要调用CheckList()方法。
或者检查一下: How to handle add to list event? 创建一个继承自List的新类,并为Add和Remove添加一个事件处理程序。
答案 1 :(得分:0)
你可以使你收集的集合成为一个可观察的集合。 然后使用数据触发器检查计数。
<Button Content="SomeButton">
<Button.Style>
<Style TargetType="Button">
<Setter Property="IsEnabled" Value="True" />
<Style.Triggers>
<DataTrigger Binding="{Binding myObservableCollection.Count}" Value="0">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
答案 2 :(得分:0)
DataGrid具有布尔HasItems
属性。直接绑定IsEnabled。
<Setter Property="Opacity" Value="1" />
重复默认值,可以省略。
最后,由于按钮IsEnabled是通过Binding设置的,因此可以使用Trigger代替DataTrigger:
<Button IsEnabled="{Binding Path=HasItems, ElementName=myDataGrid}">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<Trigger property="IsEnabled" Value="False">
<Setter Property="Opacity" Value=".5" />
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>