j'ai créé une application où il y a une série de liaisons de commande attachée au MainWindow de ma demande:commande problèmes de liaison dans AvalonDock
(code simplifié par souci de concision)
<Window x:Class="DBBrowser.Design.Project.ProjectView"
...>
<Window.CommandBindings>
<Commands:DataContextCommandBinding Command="ProjectCommands:ProjectRoutedCommands.OpenReferenceList" Executed="OpenReferenceList" CanExecute="CanOpenReferenceList"/>
...
</Window.CommandBindings>
</Window>
Au sein ViewModel du projet sont deux fonctions:
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);
}
faisant l'impasse sur un tas de détails, il y a 3 scénarios dans lesquels cette commande peut être appelée:
- En tant que DockableContent dans la fenêtre de l'application principale
- En tant que nouveau contrôle de fenêtre, contenant le DockableContent
- En tant que FloatingWindow, créé par "arracher" la fenêtre via AvalonDock
Scénario # 1 et 2 fonctionnent parfaitement en utilisant la commande de liaison suivante:
<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"/>
Cependant, lorsque je "déchire" le A ValonDock fenêtre, le bouton grise. Cependant, une trace de pile a montré que CanExecute() était appelé ET renvoyait vrai pour ce bouton ... mais le bouton est resté désactivé.