2011-11-09 176 views
1

我在這裏的目標是禁用和啓用GUI上的一些項目,基於在窗口後面的代碼中執行期間將被更改的標誌的值。我已經設置了一個DependencyProperty來完成這個任務。我相信我所要做的就是將此屬性綁定到適當的「IsEnabled」屬性,並且所有內容都應該可以工作。有些東西沒有正確連接,所以什麼也沒有發生。我在這裏錯過了一些語法嗎?DependencyProperty綁定不起作用

這裏是在WPF結合(MainWindow.xaml):

<MenuItem Name="LoggingMenuItem" Header="_Logging" IsCheckable="True" Checked="LoggingMenuItem_Checked" IsEnabled="{Binding ElementName=IsMonitoring}" /> 

這裏是在後面的代碼 「IsMonitoring」 屬性的聲明(MainWindow.xaml.cs):

public static readonly DependencyProperty IsMonitoringProperty = 
    DependencyProperty.Register("IsMonitoring", typeof(Boolean), typeof(Window)); 

public bool IsMonitoring 
{ 
    get { return (bool)GetValue(IsMonitoringProperty); } 
    set { SetValue(IsMonitoringProperty, value); } 
} 

回答

5

您的綁定配置不正確。 ElementName屬性應指向窗口中的「元素」(即控件),並應使用「路徑」屬性指定屬性名稱。

就你而言,你想給窗口一個名字來使用。我傾向於使用「this」這個名字,當然它可以是任何你想要的。

<Window x:Name="this" 
     ... 
     > 
    ... 
    <MenuItem IsEnabled="{Binding ElementName=this, Path=IsMonitoring}" /> 
    ... 
</Window> 
+0

僅供參考,這工作,但我不得不引用「this」的引號,使它像這樣'x:Name =「this」'編譯。這很有趣,但是從後面的代碼我可以通過名字訪問元素和屬性,沒有任何問題。當我綁定到在WPF中聲明的「其他」UI項目時,WPF代碼也是如此,這沒有問題。那麼爲什麼當我試圖訪問WPF代碼中聲明的代碼中的某些特殊情況? – Ultratrunks

+1

在這種情況下,Ultratrunks,不要忘記將它標記爲答案 –

+0

@Ultratrunks - 綁定將默認查看DataContext中用於控件的屬性(通常是您的「View Model」)。在你的情況下,你想看看控制本身的屬性。 – Reddog