2

我有一个自定义命令:

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 属性集的按钮。该按钮正在根据 myCommandCanExecuteHandler 中的逻辑正确启用/禁用。

但现在我还想控制这个按钮的可见性(独立于映射到 IsEnabled 的 CanExecute)。我该如何解决这个问题?

在这里可以找到关于同一问题的讨论:http ://social.msdn.microsoft.com/forums/en-US/wpf/thread/c20782f8-2d04-49d3-b822-f77b4b87c27a/,但不知何故 CanBeSeen 是RoutedUICommand 派生类的一个属性对我没有吸引力。

4

3 回答 3

1

您可以将 xaml 中的可见性属性绑定到决定按钮可见性的值

<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
}
于 2012-06-09T12:00:00.400 回答
0

你想让按钮在启用/禁用按钮时可见...如果你必须使用布尔到可见性转换器将 IsEnabled 属性绑定到可见性属性...

于 2012-06-09T06:49:28.683 回答
0

我今天遇到了一个非常相似的问题。

当可见性转换器将按钮的可见性设置为折叠状态时,“有时”会忽略 CanExecute 绑定。我说“有时”是因为,如果我在可见性转换器中放置一个断点,它会改变行为。

当可见性更改为可见时 - CanExecute 不再被调用。在 UI 上的任意位置单击鼠标会刷新 CanExecute 绑定,使其按预期工作。

我通过将 Button IsEnabled 属性直接绑定到我的视图模型上的一个属性来解决这个问题,这反映了我的 CanExecute 所做的事情。

于 2013-08-16T12:36:42.870 回答