我有一个自定义命令:
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中,我有一个带有Command属性的Buton。根据myCommandCanExecuteHandler中的逻辑正确启用/禁用该按钮。
但是现在我想控制这个按钮的可见性(独立于映射到IsEnabled的CanExecute)。我该如何处理这个问题?
有关同一问题的讨论可以在这里找到:http://social.msdn.microsoft.com/forums/en-US/wpf/thread/c20782f8-2d04-49d3-b822-f77b4b87c27a/,但不知何故,CanBeSeen是RoutedUICommand派生类的属性的想法对我没有吸引力。
答案 0 :(得分:1)
您可以将xaml中的visibility属性绑定到决定按钮可见性的值
<Button Content="Button" Height="23" Visibility="{Binding someclass, Converter={Binding VisibitlityConverter}}"/>
并使用转换器将bool值转换为callpsed或visible
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
}
答案 1 :(得分:0)
当您启用/禁用按钮时,是否要使按钮可见...如果那时您必须使用布尔到可见性转换器将IsEnabled属性绑定到Visibility属性...
答案 2 :(得分:0)
我今天遇到了一个非常类似的问题。
“有时”当按钮的可见性由可见性转换器设置为折叠状态时,将忽略CanExecute绑定。我说“有时”因为,如果我在可见性转换器中放置一个断点,它会改变行为。
当可见性更改为Visible时 - 不会再次调用CanExecute。在UI上的任何位置单击鼠标都会刷新CanExecute绑定,这使其按预期工作。
我通过将Button IsEnabled属性直接绑定到我的viewmodel上的属性来解决这个问题,这反映了我的CanExecute所做的事情。