【问题标题】:How to disable a button if there is no items in DataGrid?如果 DataGrid 中没有项目,如何禁用按钮?
【发布时间】:2018-04-08 00:46:45
【问题描述】:

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

我该怎么做?

【问题讨论】:

  • 如果没有项目,他们如何选择?

标签: c# wpf xaml


【解决方案1】:

给我一​​个按钮的名字:

<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 添加一个事件处理程序。

【讨论】:

    【解决方案2】:

    您可以将要绑定的集合设为 observablecollection。 然后使用一个数据触发器来检查它。

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

    【讨论】:

      【解决方案3】:

      DataGrid 具有布尔值 HasItems 属性。直接绑定 IsEnabled。

      &lt;Setter Property="Opacity" Value="1" /&gt;重复默认,可以省略。

      最后,由于按钮 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-08
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 2011-02-18
        相关资源
        最近更新 更多