2010-11-10 3 views
0

Я создал приложение, где есть ряд командных переплетов прикреплены к MainWindow моего приложения:команд Переплет вопросы в AvalonDock

(код упрощен для краткости)

<Window x:Class="DBBrowser.Design.Project.ProjectView" 
...> 

    <Window.CommandBindings> 
    <Commands:DataContextCommandBinding Command="ProjectCommands:ProjectRoutedCommands.OpenReferenceList" Executed="OpenReferenceList" CanExecute="CanOpenReferenceList"/> 
... 
</Window.CommandBindings> 
</Window> 

В ViewModel проекта являются две функции:

public bool CanOpenReferenceList(object parameter) 
{ 
    return true; 
} 

public void OpenReferenceList(object parameter) 
{ 
    var dockedReferenceList = new DockableUniversalListView()  
    { 
     Name = "referenceList", 
     Title = "Reference List" 
    }; 
    referenceData = dockedReferenceList.DataContext as ReferenceListViewModel; 
    if (referenceData != null) referenceData.EvListSelected += WoWObjectListRecieved; 

    DockedWindows.Add(dockedReferenceList); 
} 

перепрыгивал кучу деталей, есть 3 сценария, в которых эта команда может быть названы:

  1. Как DockableContent в главном окне приложения
  2. В качестве нового элемента управления Window, содержащий DockableContent
  3. в качестве FloatingWindow, созданный "отрывания" окно через AvalonDock

Сценарий # 1 и № 2 работают отлично, используя следующую командную привязку:

<Button Margin="2" Content="Validate" Height="23" Name="Validate" Width="75" 
     Command="ProjectCommands:ProjectRoutedCommands.OpenReferenceList" 
     CommandTarget="{Binding Path=MainWindow.DataContext,Source={x:Static Application.Current}}" 
     DockPanel.Dock="Left" 
     CommandParameter="{Binding Path=SelectedWoWObjectList}" 
     TabIndex="20" HorizontalAlignment="Right"/> 

Однако, когда я «отрываю» A valonDock, кнопка высыхает. Тем не менее, трассировка стека показала, что вызывается CanExecute() и возвращает true для этой кнопки ... но кнопка осталась отключенной.

ответ

1

Решение заключалось в том, что привязка CommandTarget была нулевой - Application.Current.MainWindow не задано, когда Constructor for MainWindow все еще вызывается.

 Смежные вопросы

  • Нет связанных вопросов^_^