通过数据绑定禁用按钮

时间:2011-08-25 14:27:22

标签: wpf treeview datatrigger

我有一个树视图和一个删除按钮,我希望只有在选择了树视图项时才能启用删除按钮。

我尝试过以下操作但不起作用:

<Button.Style>
  <Style>
   <Style.Triggers>
    <DataTrigger Binding="{Binding ElementName=tv_cats, Path=Items.IndexOf(SelectedItem)}" Value="-1">
     <Setter Property="Button.IsEnabled" Value="false" />
    </DataTrigger>
   </Style.Triggers>
  </Style>
</Button.Style>

进行测试 - 代码背后 -

tv_cats.Items.IndexOf(tv_cats.SelectedItem).ToString() 

如果未选择电视项目,则返回-1,如果是,则返回电视项目索引。

如何在XAML中使用此属性?

2 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点,

  1. 通过评估TreeView的selectedItem属性的按钮上的触发器(默认情况下启用Button,当SelectedItem =“{x:Null}”时,Enabled为false

  2. 通过转换器(Implements IValueConverter)将button.Enabled绑定到TreeView.SelectedItem的元素属性,该转换器将项存在转换为布尔值。

  3. 在MVVM中,您可以在ViewModel上公开一个ButtonIsEnabled属性,它以某种方式检查SelectedItem的值(最简单的方法是将TreeViews Selected Item属性绑定到VIewModel上的另一个属性)并且从中确定启用状态。

答案 1 :(得分:1)

尝试以下方法:

<Button.Style>  
   <Style >   
      <Style.Triggers>    
           <DataTrigger Binding="{Binding ElementName=tv_cats, Path=SelectedItem}" Value="{x:Null}">     
              <Setter Property="Button.IsEnabled" Value="false" />    
            </DataTrigger>   
       </Style.Triggers>  
   </Style>
</Button.Style>

确保Buttons XAML声明中没有明确的IsEnabled =“false”声明。否则触发器将无效。