我对Control.DataBindings有疑问。
如何将Button.Enabled绑定到是否有任何选择了ListView的项目?即:
Button.Enabled = ListView.SelectedItems.Count > 0;
我知道我可以使用ListView.SelectionChanged事件来执行此操作。
我只是想知道如何使用DataBinding来完成同样的工作。
感谢。
彼得
P.S。:我想这样做的原因是:如果Button.Enabled取决于许多其他控件的条件,我认为DataBinding更简单。
答案 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>