WPF 命令控制可见性
本文关键字:可见性 控制 命令 WPF | 更新日期: 2023-09-27 18:36:48
我有一个自定义命令:
public static class CommandLibrary
{
private static RoutedUICommand cmdMyCommand = new RoutedUICommand("My command", "MyCommand", typeof(CommandLibrary));
public static RoutedUICommand MyCommand{ get { return cmdMyCommand ; } }
}
我注册了这样的绑定
CommandManager.RegisterClassCommandBinding(typeof(SomeClass), new CommandBinding(CommandLibrary.MyCommand, new ExecutedRoutedEventHandler(myCommandExecuteHandler), new CanExecuteRoutedEventHandler(myCommandCanExecuteHandler)));
在generic.xaml中,我有一个设置了命令属性的Buton。该按钮正在根据 myCommandCanExecuteHandler 中的逻辑正确启用/禁用。
但是现在我还想控制此按钮的可见性(独立于映射到IsEnabled的CanExecute)。我该如何处理这个问题?
关于同一问题的讨论可以在这里找到:http://social.msdn.microsoft.com/forums/en-US/wpf/thread/c20782f8-2d04-49d3-b822-f77b4b87c27a/,但不知何故,CanBeSeen是RoutedUICommand派生类的属性的想法对我没有吸引力。
可以将 XAML 中的可见性属性绑定到决定按钮可见性的值
<Button Content="Button" Height="23" Visibility="{Binding someclass, Converter={Binding VisibitlityConverter}}"/>
并使用转换器将布尔值转换为调用或可见
class visibilityConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return (bool)value == true? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
是否要在启用/禁用按钮时使按钮可见...如果那时您必须使用布尔到可见性转换器将 IsEnabled 属性绑定到可见性属性...
我今天遇到了一个非常相似的问题。
"有时",当可见性转换器将按钮的可见性设置为折叠状态时,将忽略 CanExecute 绑定。我说"有时"是因为,如果我在可见性转换器中放置断点,它会改变行为。
当可见性更改为可见时 - 不会再次调用 CanExecute。在 UI 上的任意位置单击鼠标将刷新 CanExecute 绑定,使其按预期工作。
我通过将 Button IsEnabled 属性直接绑定到我的视图模型上的属性来解决此问题,该属性反映了我的 CanExecute 的功能。