2013-03-17 71 views
2

我有一个自定义类MyPerson。所有(相关)属性都实现INotifyPropertyChanged。 我创建了一个UserControl来显示它,并且它一切正常。绑定到像MyPerson.FirstName(一个字符串)这样的属性都可以工作 - 它们按预期方式显示和更新(双向绑定)。作为DependencyProperty的自定义对象

现在我想在代码隐藏中做更复杂的东西,所以我想创建一个带有MyPerson的PropertyType的DependencyProperty,但我不知道如何构造DependencyProperty,特别是PropertyChangedCallback部分。

可以这样做?怎么会这样?

+1

MSDN文档显示这本身。 http://msdn.microsoft.com/en-gb/library/ms753358.aspx如果您向下滚动到“使用属性系统注册属性”部分,它将显示一个自定义DP注册类型为“AquariumObject”的改变回调“OnUriChanged” – Viv 2013-03-17 09:07:41

回答

0

阅读这篇文章 - Custom Dependency Properties

喜欢的东西 -

public static readonly DependencyProperty MyPersonValueProperty = 
     DependencyProperty.Register("MyPersonValue", typeof(MyPerson), 
     typeof(MyPersonControl), new FrameworkPropertyMetadata(null, 
      FrameworkPropertyMetadataOptions.AffectsRender, 
       new PropertyChangedCallback(OnPersonChanged))); 

public MyPerson ThePerson 
{ 
    get { return (MyPerson)GetValue(MyPersonValueProperty); } 
    set { SetValue(MyPersonValueProperty, value); } 
} 

private static void OnPersonChanged(DependencyObject d, 
           DependencyPropertyChangedEventArgs e) 
{ 
    // Property change code here 
} 
+0

谢谢!公共静态只读的DependencyProperty MyPersonValueProperty = DependencyProperty.Register( “MyPersonValue”, typeof运算(MyPerson) typeof运算(MyPersonControl) 新FrameworkPropertyMetadata(NULL, FrameworkPropertyMetadataOptions.AffectsRender, 新PropertyChangedCallback(OnUriChanged) ) );和MyPerson ThePerson {{{(MyPerson)GetValue(MyPersonValueProperty); } set {SetValue(MyPersonValueProperty,value);} } }是我所需要的。 – ausgeorge 2013-03-25 02:06:54

+0

仅链接答案的问题...您的链接已死 – Jonesopolis 2015-07-09 17:52:02

+0

@Jonesy - 更新了一些示例并更新了链接。谢谢。 – 2015-07-09 19:29:08