2010-05-10 94 views
0

我已經實現了一個功能區中的按鈕,並且無法綁定到命令。該功能區位於名爲AppRibbon的UserControl中。 AppRibon控件具有名爲SelectedModule的公共屬性,該屬性具有名爲RenameModuleCmd的屬性。當我爲該按鈕創建一個事件處理程序時,我明確地調用該命令以確保一切正常,如下所示:WPF中的按鈕問題綁定命令

public partial class ApplicationRibbon : UserControl { 
    public ApplicationRibbon() { 
     InitializeComponent(); 
    } 

    public ModuleViewModel SelectedModule { get; set; } 

    private void ButtonTool_Click(object sender, RoutedEventArgs e) { 
     SelectedModule.RenameModuleCmd.Execute(null); 
    } 
    } 

此工作正常。但我顯然不想使用模型後面的代碼......而是使用Command綁定。所以我嘗試了folling綁定,但沒有任何人解僱了命令。

<... Command="{Binding Path=SelectedModule.RenameModuleCmd}" /> 
<... Command="{Binding Path=AppRibbon.SelectedModule.RenameModuleCmd}" /> 

我不明白爲什麼這些不起作用。我在命令的CanExecute和Execute方法上以及RenameModuleCmd屬性的getter上設置了斷點,但沒有命中。想法?

回答

0

您需要指定在開發UserControl和綁定內部時綁定的元素。嘗試:

<... Command="{Binding ElementName=AppRibbon, Path=SelectedModule.RenameModuleCmd}" /> 

假設您的UserControl被命名爲AppRibbon,因爲您的文章似乎暗示。

+0

感謝JustABill,但我在用戶控件中定義了SelectedModule。因此我不認爲ElementName是相關的。我沒有應用程序方便測試,但我懷疑它不會做出改變。 – 2010-05-11 18:40:33

+0

這看起來很直觀,但相信我,除非傳遞一個ElementName或已設置DataContext,否則無法綁定到UserControl(或Window,或任何其他「最外層」元素)的屬性。如果你已經完成了後者,那麼我只是誤讀,我道歉。 – JustABill 2010-05-11 20:39:35

+0

我剛剛驗證了名稱(),然後將其添加爲綁定:Command =「{Binding ElementName = Ribbon,Path = SelectedModule.RenameModuleCmd}」 Ribbon UserControl has a public SelectedModule的屬性,它是ModuleViewModel類型,其中包含ICommand類型爲RenameModuleCmd的公共屬性。我在getter中設置了斷點,不幸的是沒有任何反應。然而,在同樣的按鈕,如果我添加一個點擊處理程序,執行以下操作,我得到所需的行爲(喜歡避免事件tho):SelectedModule.RenameModuleCmd.Execute(null); 想法? – 2010-05-12 10:33:43