none
Silverlight 如何定义“只读”依赖属性? RRS feed

  • 常规讨论

  • 1)场景:
    依赖属性实现了属性值变更,
    比普通属性更方便用于绑定,
    可用于模板绑定(TemplateBinding)。
    可见,其功能非常强大。
    我们有时希望该依赖属性,
    只能由某个开发者自己管理,
    不希望调用者更改。
    为此,需要定义只读类型的依赖属性。
    然而,SL无法定义只读依赖属性。

    2)现给出一个SL中定义“只读”的方法,供参考。
    如有更巧妙、更清晰的定义方法,请指教。

            /// <summary>
            /// PageCount,页总数,只读。
            /// </summary>
            public int PageCount
            {
                get { return (int)GetValue(PageCountProperty); }
                private set
                {
                    PageCount_IsInnerSet = true;
                    SetValue(PageCountProperty, value);
                    PageCount_IsInnerSet = false;
                }
            }
            private bool PageCount_IsInnerSet = false;
            /// <summary>
            /// PageCount,页总数,只读,依赖属性。
            /// </summary>
            public static readonly DependencyProperty PageCountProperty =
                DependencyProperty.Register("PageCount", typeof(int), typeof(T4DBPager),
                new PropertyMetadata(0, PageCount_Changed));
            private static void PageCount_Changed(DependencyObject s, DependencyPropertyChangedEventArgs e)
            {
                var Owner = s as T4DBPager; var ReadOnlyErr = "PageCount is read only.";
                if (!Owner.PageCount_IsInnerSet) { throw new NotSupportedException(ReadOnlyErr); }
            }

    如此定义,
    1)可保证你自己在代码中方便赋值。
    如:PageCount = 100。
    2)但是不允许从外部赋值。
    如:
    21)PageCount = 100,编译时就无效,
    22)通过 SetValue(PageCountProperty, 100)也将引发"PageCount is read only."异常。

    2012年10月3日 10:23

全部回复