2011-03-09 114 views
1

我創建了我自己的UserControl,它具有一些從某些東西計算出來的屬性,我們稱它爲Result。現在,我想把這個控件放在一個Grid上,並且我有一些buisness對象。我想將此對象中的屬性綁定到我的屬性Result。所以,我做這樣的事情:WPF綁定到我自己的屬性

當然
<MyControl Result="{Binding PropertyInObject}" ... 

中DataContext設置和其他屬性的綁定(WPF屬性)工作。但是這不是。 首先它拍攝一個異常,說我不能綁定到非依賴項屬性。所以我把它註冊爲一個。現在它沒有例外,但也沒有完成工作。那麼我該怎麼做?

+0

在調試器中運行應用程序,並看看VS輸出窗口。在那裏打印綁定錯誤消息。 – Jon 2011-03-09 18:17:23

+0

你可以顯示你的控件的代碼和實例化它的XAML嗎? – devdigital 2011-03-09 18:23:11

+0

[WPF綁定到我自己的屬性]的可能重複(http://stackoverflow.com/questions/5249922/wpf-binding-to-my-own-property) – 2011-03-09 19:02:18

回答

2

沒有看到您的代碼和問題描述,聽起來您的「結果」屬性位於用戶控件的代碼隱藏中。如果這是真的,那麼您需要創建「結果」作爲依賴項屬性。然後你可以用另一種方法設置你的結果值(例子是使用SetResult())

希望這會有所幫助。 (這裏是獲得一個依賴屬性的外殼到你的代碼,在VS 2010中的一個片段,鍵入「propdp」,然後按下TAB鍵兩次。)

public int Result 
    { 
     get { return (int)GetValue(ResultProperty); } 
     set { SetValue(ResultProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for Result. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty ResultProperty = 
     DependencyProperty.Register("Result", typeof(int), typeof(MyClassName), new UIPropertyMetadata(0)); 

    private void SetResult() 
    { 
     int resultValue = 0; 
     // Do calculations 
     Result = 0; 
    } 
1

這個問題可能是你認爲的綁定雙向默認情況下,但它不是。在開發自定義控件時,您在定義屬性時確實需要仔細考慮。

要定義默認屬性雙向(你通常想要的),你需要的東西是這樣的:

public static readonly DependencyProperty PropProperty = 
     DependencyProperty.Register("Prop", typeof(Boolean), typeof(MyControl), new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.**BindsTwoWayByDefault**));