如何以及在何处使用DependencyProperty

时间:2010-10-06 18:17:41

标签: wpf binding dependency-properties

我是WPF的新手,所以在阅读了一段时间之后,我推断我的问题需要用这种模式处理:DependencyProperty

我希望我的ToggleButton拥有另一个布尔属性。

我的问题是我应该在哪里分配这个属性,以及如何?在绑定到ToggleButton的对象内部?

假设我有一个类单元格(绑定到此Button),点击后我想要从这一点开始,它会在触发器上保持新面孔。

我的新财产将是:

 bool wasClick 

有人可以向我解释我应该如何写它并告诉我更多关于这个新概念的信息吗?

修改 主要的主题是我应该在哪里定义它,所以我希望它被定位到Button,但我应该在哪里编写代码。假设我有一个绑定到Button的类。我应该写:

public static readonly DependencyProperty IsSpinningProperty = 
       DependencyProperty.Register(
...    "IsSpinning", typeof(Boolean),

在这个课程中还是应该在我的视图模型中编写?如果是这样,在哪里以及如何?

1 个答案:

答案 0 :(得分:1)

顾名思义(有点不好),依赖属性是一个属性,其值可以依赖于其他东西。通常,这意味着一个属性,其值在某些条件下由WPF框架自动(并动态)确定。最常见的条件是:

  • 该属性具有默认值,或者从可视树中的祖先继承其值。在这种情况下,属性的值是在没有设置的情况下确定的。
  • 该属性是数据绑定的目标。
  • 属性的值由动画设置。

并非所有其值都由WPF框架设置的属性都需要是依赖项属性。具有公共getter和setter的任何CLR属性都可以是双向数据绑定的源。

在您的情况下,听起来您并不真正需要依赖属性,而不是您使用的是视图模型。您可以这样做(假设您已在类中实现了属性更改通知):

private bool _IsChecked;

public bool IsChecked
{
   get { return _IsChecked; } }
   set
   {
      if (value == _IsChecked)
      {
         return;
      }
      _IsChecked = value;
      WasChecked = WasChecked || value;
      OnPropertyChanged("IsChecked");
   }
}

private bool _WasChecked;

public bool WasChecked
{
   get { return _WasChecked; }
   private set
   {
      if (value == _WasChecked)
      {
         return;
      }
      _WasChecked = value;
      OnPropertyChanged("WasChecked");
   }
}