2010-01-12 76 views
4

我有兩個用戶控件(IconUserControl & DisplayUserControl),我在與結合依賴屬性的問題,這裏的一些細節:問題與一個用戶控件綁定依賴項屬性

  • IconUserControl具有IsDisplayShown的布爾DP
  • DisplayUserControl有IsDisplayShown

一個布爾值DP在XAML我:

<local:DisplayUserControl 
        x:Name="DisplayUserControl" 
        IsDisplayShown="{Binding ElementName=IconUserControl, Path=IsDisplayShown, Converter={StaticResource DummyConverter}}" /> 

<local:IconUserControl 
        x:Name="IconUserControl" /> 

當IconUserControl.IsDisplayShown設置爲true,我可以在這個值獲得通過的DummyConverter看到,但它從來沒有設置DisplayUserControl.IsDisplayShown。

但是,如果在代碼隱藏的查看我設置DisplayUserControl.IsDisplayShown = true;,然後正常工作。

我DataContext的兩個用戶控件在構造函數「這個」設置。我試圖擺弄綁定的「模式」屬性。

*注:DummyConverter剛剛返回值,我只有這證實結合是努力工作。

我在做什麼錯?

編輯:

這裏有兩個DPS:

public bool IsDisplayShown 
     { 
      get { return (bool)GetValue(IsDisplayShownProperty); } 
      set { SetValue(IsDisplayShownProperty, value); } 
     } 
     public static readonly DependencyProperty IsDisplayShownProperty = 
      DependencyProperty.Register("IsDisplayShown", typeof(bool), typeof(IconUserControl), new UIPropertyMetadata(false)); 

public bool IsDisplayShown 
     { 
      get { return (bool)GetValue(IsDisplayShownProperty); } 
      set 
      { 
       if (value) 
        ShowOpenItems(); 
       else 
        HideOpenItems(); 
       SetValue(IsDisplayShownProperty, value); 
      } 
     } 
     public static readonly DependencyProperty IsDisplayShownProperty= 
      DependencyProperty.Register("IsDisplayShown", typeof(bool), typeof(DisplayUserControl), new UIPropertyMetadata(false)); 

回答

5

這會幫助你,但可能不會解決整個問題。不過,這是一個很好的開始。添加此代碼將導致綁定的調試信息轉儲到Visual Studio中的「調試」窗口。

這個命名空間添加到您的XAML ....

xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase" 

那麼,你的綁定,補充一點:

diagnostics:PresentationTraceSources.TraceLevel=High 

檢查Bea Stollnitz本文的詳細信息

+0

權。而且,您實際上只能打開擴展跟蹤以進行特定綁定。 –

+0

感謝您的診斷,這很好,它會派上用場。但是,診斷並沒有告訴我這個問題。 診斷中的最後一項是......「TransferValue - 使用最終值'True'」......這是你期望看到的,爲什麼沒有通過實際屬性仍然是個謎。如何在實際DP上設置診斷,以便我可以看到發生了什麼? –

+0

您可以將更改的事件添加到DP聲明中。看看http://serialseb.blogspot.com/2007/08/wpf-tips-5-receive-notifications-for.html的例子,然後你可以設置一個斷點,等等。 –

0

這只是沒有按」牛逼意義=)應工作=)

你有沒有嘗試設置模式=雙向我綁定? 你確定你的DP定義是正確的嗎?你可以添加他們的帖子?

+0

是的我試圖在綁定中設置Mode屬性,也是UpdateSourceTrigger,但沒有任何幫助。我已經更新了這個問題 –

+0

是的,這使事情更清楚。 Th DP本身不是通過綁定來設置的!綁定獲取DP,然後更改其值,而不是控件上的屬性。 這是一個常見的問題,我想我也曾去過那裏=) 要獲得財產變更通知,您需要一個回調(http://msdn.microsoft.com/en-us/library/ms745795。 aspx)... Muad'Dib的鏈接也很有用。 G'luck =) –

+0

謝謝...我已經從Muad'Dib的鏈接實施瞭解決方案,現在一切都很順利。 –