2012-06-01 65 views
1

我已經在WPF中創建了一個用戶控件,並在後面的代碼中創建了一些依賴項屬性。依賴屬性沒有得到或設置值

我添加了一些WPF控件到我的用戶控件的一個是進度條,所以我試圖做的是將值進度財產公開如下:

 public static readonly DependencyProperty valueProperty = DependencyProperty.Register(
     "Value", 
     typeof(Double), 
     typeof(MyUserControl), 
     new FrameworkPropertyMetadata(
      ValuePropertyCallback)); 

    private static void ValuePropertyCallback(DependencyObject controlInstance, DependencyPropertyChangedEventArgs args) 
    { 
     MyUserControl myUserControlInstance = (ProgressControl)controlInstance; 
     myUserControlInstance.progressBar.Value = (Double)args.NewValue; 
    } 

    public Double Value 
    { 
     get { return (Double)GetValue(valueProperty); } 
     set { SetValue(valueProperty, value); } 
    } 

而在XAML我有寫這個:

<MyUserControl Name="myControl" Value="{Binding ProgressBarValue}" > 

但它似乎沒有工作,既不設置也沒有得到的價值。

我有幾個小時審查這個,但我不知道我做錯了什麼。

希望你能幫助我,謝謝你提前。

注:的DataContext是預先定義的,它是正確的,因爲這是唯一的約束力不工作)

+0

[綁定錯誤](http://blogs.msdn.com/b/wpfsldesigner/archive/2010/06/30/debugging-data-bindings-in-a-wpf-or-silverlight-application.aspx) ?你是否在本地覆蓋了DataContext,現在它不會像你期望的那樣繼承另一個數據上下文? –

+0

與調試器,你可以看到如果你輸入回調? – GameAlchemist

+0

@ H.B。我已經證實,實際上我有更多的屬性可以工作,因爲這個問題對我來說太奇怪了,因爲我所有的其他屬性都可以正常工作 – Dante

回答

1

原來我的問題是我沒有實現INotifyPropertyChanged接口,所以我沒有做出改變。但是因爲我是使用MVVM的WPF新手,所以我不知道。

但是你只需要創建一個ObservableObject,那麼你的viewModel類就必須從它繼承。

Here是創建ObservableObject類以及如何從中繼承的示例。

1

valueProperty < ---->「值」不匹配......(五/ V):=)

+0

謝謝你的回覆,但根據我讀過的,「valueProperty」是我的依賴屬性,它註冊了我的「Value」屬性,不是嗎? – Dante

+0

@丹特:你說得對,這個領域被稱爲什麼並不重要。 –

+0

當然H.B.,沒關係... http://msdn.microsoft。com/en-us/library/ms753358.aspx查看「依賴項屬性名稱約定」以查看「屬性的命名約定及其支持DependencyProperty字段非常重要」。 – GameAlchemist

1

你試過模式=雙向:

<MyUserControl Name="myControl" Value="{Binding ProgressBarValue, Mode=TwoWay}" > 

我也用PropertyMetadata代替FrameworkPropertyMetadata

+0

謝謝你的回覆。我不知道這一點,我認爲這很有用,但它仍然不起作用。這真的很奇怪,因爲我之前創建了一些依賴關係,他們工作:( – Dante

1

試着改變你的依賴項屬性的名字PascalCased:

ValueProperty 

你也可能想看看BindsTwoWayByDefault以確保更改您的DP寫入源對象。