C#:如何绑定Button.Enabled是否有任何项目选择ListView

时间:2010-10-23 23:41:43

标签: c# data-binding controls properties

我对Control.DataBindings有疑问。

如何将Button.Enabled绑定到是否有任何选择了ListView的项目?即:

Button.Enabled = ListView.SelectedItems.Count > 0;

我知道我可以使用ListView.SelectionChanged事件来执行此操作。

我只是想知道如何使用DataBinding来完成同样的工作。

感谢。

彼得

P.S。:我想这样做的原因是:如果Button.Enabled取决于许多其他控件的条件,我认为DataBinding更简单。

2 个答案:

答案 0 :(得分:1)

如果要使用绑定,则需要创建ValueConverter。这是通过实现System.Windows.Data.IValueConverter接口完成的(MSDN页面有一个示例实现)。如果传入的int大于0,则返回true。

在您的情况下,您可以将Button.Enabled绑定到ListView.SelectedItems.Count,并指定您的值转换器。

正如@PaulG在评论中所说,使用SelectionChanged事件可能更容易,但可以通过绑定来实现。

答案 1 :(得分:0)

我通常首先尝试触发器然后尝试值转换器 在这种情况下,您实际上不必实现值转换器,简单的DataTriggger将执行:

<Button>
  <Button.Style>
    <Style TargetType="{x:Type Button}">
      <Style.Setters>
        <Setter Property="Content" Value="Enabled When Selection Changed"/>          
      </Style.Setters>
      <Style.Triggers>
        <DataTrigger Binding="{Binding ElementName=_listBox, Path=SelectedItems.Count}"
                     Value="0">
          <Setter Property="IsEnabled" Value="False"/>
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Button.Style>
</Button>
<ListBox x:Name="_listBox">
  <ListBox.Items>
    <ListBoxItem Content="1"/>
    <ListBoxItem Content="2"/>
  </ListBox.Items>
</ListBox>