【问题标题】:Can I make a dependency property that's read-only?我可以创建一个只读的依赖属性吗?
【发布时间】:2009-08-24 16:59:53
【问题描述】:

我需要这个依赖属性只能用于读取操作。外部对象应该不能给它赋值。

【问题讨论】:

  • 你的编程语言是……
  • 如果是 c#,将 setter 设为私有。公共对象道具 { 得到;私人集;}
  • @Mikael:这还不够好,因为可以通过 DependencyObject 的 SetValue 设置(更直接)依赖属性。
  • 是的 - 您需要使用 DepedencyProperty.RegisterReadOnly 而不是 Register 来声明它们。

标签: .net wpf dependency-properties


【解决方案1】:

是的,当然(想想IsMouseOver 为什么只读依赖属性应该存在)。 MSDN 有一篇关于这个主题的精彩文章。

实现只读依赖属性存在一些问题,在某些情况下它们将不起作用。但是,在某些情况下是可能的。对于这些情况,以下是实现只读依赖属性的简要指南:

  1. 使用RegisterReadOnly 而不是Register
  2. 不要在包装的属性中公开公共 set 方法。
  3. 来自RegisterReadOnly 的返回值是DependencyPropertyKey 类型(而不是通常的DependencyProperty)。存储但不公开此值。

链接的文章将为您提供必要的详细信息。

【讨论】:

    【解决方案2】:

    是的,你可以。

    MSDN 有一整节描述了如何定义和使用Read-Only Dependency Properties

    主要问题是调用DependencyProperty.RegisterReadOnly 而不是注册。此外,如果您在对象上创建一个属性来处理此问题,请确保仅在该属性中实现公共 getter,而不是公共 setter。

    【讨论】:

      猜你喜欢
      • 2010-11-10
      • 2012-01-01
      • 2013-04-03
      • 2015-01-16
      • 2010-11-21
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      • 2011-11-14
      相关资源
      最近更新 更多