如果列表框中包含内容,如何设置按钮属性IsEnabled?

时间:2011-03-07 05:07:56

标签: silverlight silverlight-4.0 binding

我正在尝试使用属性IsEnabled = true创建按钮,只有列表框有一个项目。如果列表框的项目比按钮属性为零,则isEbabled必须为“false”。我想找到实现它的最佳方法。我正在动态地填充listboxitems。任何想法都非常感谢!

<ListBox x:Name="ListBox" SelectionMode="Multiple" Height="100" />
<Button x:Name="btnNext" Style="{StaticResource AVV_ButtonStyle}" Content="NextButton" IsEnabled="False" />

2 个答案:

答案 0 :(得分:2)

在WPF中:

<ListBox x:Name="ListBox" SelectionMode="Multiple" Height="100" />
<Button x:Name="btnNext" Style="{StaticResource AVV_ButtonStyle}" Content="NextButton" IsEnabled="{Binding ElementName=ListBox,Path=HasItems" />

Silverlight不支持ItemsControl上的HasItems,因此您需要将此绑定移动到DataContext上的布尔属性,这将返回如下内容:

return list.Count > 0

我会订阅List绑定的集合上的CollectionChanged事件,然后针对您的IsEnabled属性绑定的boolean属性引发PropertyChanged事件,以强制绑定重新读取其源。

如果已将按钮绑定到命令,则可以通过命令上的CanExecute属性执行此操作,尽管Silverlight中的Commands实现与WPF不同。

答案 1 :(得分:0)

您可以使用按钮的命令。然后,您可以为该命令指定CanExecute方法。这将使按钮启用/禁用。然后,您需要做的就是每次listBox的源更改时重新检查CanExecute值。代码类似于:

        (this as INotifyPropertyChanged).PropertyChanged += (s, e) =>
        {
            (YourCommand as DelegateCommand).RaiseCanExecuteChanged();
        };