2010-10-23 88 views
2

我有一个关于Control.DataBindings的问题。C#:如何绑定Button.Enabled是否有任何项目选择ListView

如何将Button.Enabled绑定到是否存在任何选中的ListView?即:

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

我知道我可以使用ListView.SelectionChanged事件来做到这一点。

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

谢谢。

彼得

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

+1

你会绑定到?我会像你所建议的那样使用SelectionChanged事件。 – PaulG 2010-10-23 23:47:52

+0

如果只有它是WPF/Silverlight,它会很容易... – slugster 2010-10-24 00:57:44

回答

1

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

对于您的情况,您将绑定Button.EnabledListView.SelectedItems.Count,并指定您的值转换器。

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

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>