ปัญหาการเชื่อมโยงคำสั่งใน 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. เป็นตัวควบคุมหน้าต่างใหม่ที่มี 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"/>

อย่างไรก็ตาม เมื่อฉัน "ฉีก" หน้าต่าง AvalonDock ปุ่มจะเป็นสีเทา อย่างไรก็ตาม การติดตามสแต็กแสดงให้เห็นว่า CanExecute() กำลังถูกเรียกและส่งคืนค่าจริงสำหรับปุ่มนั้น... แต่ปุ่มยังคงปิดใช้งานอยู่


person Alexander Yoshi    schedule 10.11.2010    source แหล่งที่มา


คำตอบ (1)


วิธีแก้ไขคือการเชื่อมโยง CommandTarget เป็นโมฆะ - Application.Current.MainWindow ไม่ได้ถูกตั้งค่าเมื่อ Constructor สำหรับ MainWindow ยังคงถูกเรียกอยู่

person Alexander Yoshi    schedule 11.11.2010