Silverlight 对DependencyObject和DependencyProperty的依赖
我正在构建一个Silverlight应用程序,我上次的一个警告是,如果您需要以Silverlight/WPF的方式正确地完成任何事情,您需要将对象建模为DependencyObject并使用DependencyProperty 我发现这个模型相当麻烦,在我使用的类中有一半需要静态字段和初始值设定项,所以使用好的旧事件驱动(观察者模式?)代替DependencyObject是个好主意吗 我的目标是尽量减少代码膨胀和锅炉板(我讨厌它们),我真的很想知道是否有人在Silverlight/WPF方面有任何技巧/技巧可以将DependencyObject和DependencyProperty的使用降到最低Silverlight 对DependencyObject和DependencyProperty的依赖,silverlight,xaml,Silverlight,Xaml,我正在构建一个Silverlight应用程序,我上次的一个警告是,如果您需要以Silverlight/WPF的方式正确地完成任何事情,您需要将对象建模为DependencyObject并使用DependencyProperty 我发现这个模型相当麻烦,在我使用的类中有一半需要静态字段和初始值设定项,所以使用好的旧事件驱动(观察者模式?)代替DependencyObject是个好主意吗 我的目标是尽量减少代码膨胀和锅炉板(我讨厌它们),我真的很想知道是否有人在Silverlight/WPF方面有任
这是个好主意吗?这实际上取决于您所指的对象。如果要将对象放在XAML树中,最好使用DependencyProperties(从而继承DependencyObject-所有UIElements都这样做)来实现DependencyProperties提供的所有好处(可设置动画、绑定、可选的自动子继承等)。如果你还没有读过,我强烈建议你读一下
如果对象是一个数据实体(即,将其值绑定到XAML树中的某个对象),则无需从DependencyObject继承。如果对象上的属性是读写的,您可能希望实现,这将允许绑定在值更改时自动更新。实际上,在Silverlight中,您不能继承DependencyObjects,因此您应该(并且必须)实现INotifyPropertyChanged 实现INotifyPropertyChanged比DependencyObjects(我将简化此操作以使其更容易)和使用DependencyProperties(DPs)有许多优点:
- 这是更轻的
- 允许您更自由地建模对象
- 可以很容易地序列化
- 您可以在需要时引发事件,这在某些情况下非常有用,例如,当您希望仅在一个UI操作中捆绑多个更改时,或者当您需要在数据未更改的情况下引发事件时(强制重画…)
- 更容易实现,特别是对于初学者
- 您可以免费获得一个回调机制(几乎),允许您在属性值更改时收到通知
- 您可以使用强制机制定义属性的最大值、最小值和当前值的规则
Laurent我同意Richard的观点,这取决于类的用途,但值得注意的是,在Silverlight 2.0版本中,您似乎可以直接从DependencyObject继承,而不必从UIElement或UserControl继承。至少,我正在我的(SilverLight 2.0 RTW)应用程序中这样做 在大多数情况下,直接从DependencyObject派生并不典型。相反,您可以从特定控件、某个控件基类(ContentControl;control;ItemsControl)、FrameworkElement或仍然参与UI的非控件类(如Panel或Grid)派生。如果您正在定义希望依赖属性处于活动状态的业务或数据存储对象,或者如果您正在创建将拥有附加属性的服务支持类,则从DependencyObject派生可能是合适的 嗯