2014-01-15 111 views
0

我有一個綁定到ObservableCollection的控件項目組。WPF - 綁定失敗到用戶控件依賴項屬性

<DataTemplate x:Key="SampleTemplate"> 
    <TextBlock Text="{Binding FirstName}"/> 
</DataTemplate> 

我創建了其內部TextBlock的用戶控件:如果它被設置爲一個TextBlock作爲每個項目的ItemTemplate中工作。我想將上面的「名字」傳遞給用戶控件。我想通過在用戶控件的代碼定義一個DependencyProperty身後,要做到這一點:

public static DependencyProperty SomeValueProperty = DependencyProperty.Register(
    "SomeValue", 
    typeof(Object), 
    typeof(SampleControl)); 

public string SomeValue 
{ 
    get 
    { 
    return (string)GetValue(SomeValueProperty); 
    } 
    set 
    { 
    (this.DataContext as UserControlViewModel).Name = value; 
    SetValue(SomeValueProperty, value); 
    } 

,並在主窗口的ItemTemplate,我把它改爲:

<DataTemplate x:Key="SampleTemplate"> 
    <local:SampleControl SomeValue="{Binding FirstName}"/> 
</DataTemplate> 

但是,這是行不通的。我不確定爲什麼這個綁定失敗時,相同的綁定適用於MainWindow內的TextBlock。我在這裏做錯了什麼?

回答

1

有很多我可以看到錯誤的,它可能是任何這些東西打破這樣的:我使用的是String,而不是Object

public static DependencyProperty SomeValueProperty = DependencyProperty.Register(
    "SomeValue", typeof(String), typeof(SampleControl), 
    new FrameworkPropertyMetaData(new PropertyChangedCallback(OnSomeValueChanged))); 

private static void OnSomeValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    ((d as SampleControl).DataContext as UserControlViewModel).Name = e.NewValue; 
} 

public string SomeValue 
{ 
    get 
    { 
    return (string)GetValue(SomeValueProperty); 
    } 
    set 
    { 
    SetValue(SomeValueProperty, value); 
    } 
} 

通知。並且,在更改PropertyChangedCallBack中的值時做了額外的工作。而且,我只做SomeValue POCO的基礎知識,因爲真正的工作是在SetValue完成的。另外值得注意的是,我沒有做任何異常處理,這可能是你的錯誤......如果在你當前的代碼中設置的.Name調用失敗,那麼SetValue永遠不會命中

+0

這裏需要注意的重要一點是, SomeValue'只是一個簡單的方法來設置依賴項屬性的值(它有其他目的,但在這裏並不相關)。依賴項屬性系統仍然可以在不通過設置器的情況下更改屬性的值。如果你想對每一個變化執行一些操作,就像賈斯汀建議的那樣註冊一個屬性更改處理程序。 –

+0

謝謝賈斯汀和蒂姆。我確實看到了錯誤,並且我已經糾正了錯誤,並且它在我傳遞一個常量值時正常工作: 「123」 <本地:SampleControl someValue中= 「{綁定源= {StaticResource的fixedValue}}」/> 但它不與正常工作的結合雖然: 我不斷收到錯誤:BindingExpression path error:'FirstName'property not found on'object' – Padmaja

相關問題