我正在尝试使用属性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" />
答案 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();
};