2012-06-08 51 views
2

我有一個自定義命令:WPF命令控制可視性

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派生類的屬性的想法並不吸引我。

+1

基於什麼控制可見性?關於命令的可執行性? –

+0

基於我的自定義邏輯,它與命令可執行邏輯不同。 –

回答

0

你想使按鈕可見按鈕時,啓用/禁用...如果,那麼你必須IsEnabled屬性使用布爾能見度轉換器Visibility屬性綁定...

+0

不,它必須「獨立於CanExecute」(如原始問題所示)。在某些情況下,即使它被禁用,我也希望按鈕可見。 –

1

你可以綁定在XAML的價值知名度屬性,它決定按鈕的知名度

<Button Content="Button" Height="23" Visibility="{Binding someclass, Converter={Binding VisibitlityConverter}}"/> 

,並使用轉換器布爾值轉換爲callpsed或可見

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

WPF已經爲此提供了一個類(BooleanToVisibilityConverter,請參閱http://msdn.microsoft.com/en-us/library/system.windows.controls.booleantovisibilityconverter.aspx)。我不認爲這是OP想要的,但是... – Alan

+0

感謝這些信息,很高興知道 – uowzd01

0

今天我遇到了一個非常類似的問題。

「有時候」,當可見性轉換器將按鈕的可見性設置爲摺疊狀態時,CanExecute綁定被忽略。我說「有時」,因爲如果我在可見性轉換器中放置斷點,它會改變行爲。

當可見性更改爲可見時 - CanExecute不再被調用。在UI上的任意位置單擊鼠標將刷新CanExecute綁定,這使其按預期工作。

我通過將Button IsEnabled屬性直接綁定到我的viewmodel上的屬性來解決此問題,該屬性反映了我的CanExecute的功能。