如果DataGrid中没有项目,如何禁用按钮?

时间:2018-04-07 12:26:22

标签: c# wpf xaml

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

我该怎么做?

3 个答案:

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