2009-07-13 68 views
52

Làm cách nào để bạn tạo thuộc tính phụ thuộc chỉ đọc? Các phương pháp hay nhất để làm như vậy là gì?Làm cách nào để bạn tạo thuộc tính phụ thuộc chỉ đọc?

Cụ thể, những gì đang stumping tôi nhiều nhất là một thực tế rằng không có thực hiện

DependencyObject.GetValue() 

mà phải mất một System.Windows.DependencyPropertyKey như một tham số.

System.Windows.DependencyProperty.RegisterReadOnly trả về đối tượng D ependencyPropertyKey thay vì DependencyProperty. Vì vậy, làm thế nào bạn có nghĩa vụ phải truy cập tài sản phụ thuộc chỉ đọc của bạn nếu bạn không thể thực hiện bất kỳ cuộc gọi đến GetValue? Hoặc bạn có nghĩa vụ phải bằng cách nào đó chuyển đổi các DependencyPropertyKey thành một đối tượng cũ DependencyProperty đồng bằng?

Lời khuyên và/hoặc mã sẽ được đánh giá cao!

Trả lời

113

Thật dễ dàng, trên thực tế (thông qua RegisterReadOnly):

public class OwnerClass : DependencyObject // or DependencyObject inheritor 
{ 
    private static readonly DependencyPropertyKey ReadOnlyPropPropertyKey 
     = DependencyProperty.RegisterReadOnly("ReadOnlyProp", typeof(int), typeof(OwnerClass), 
      new FrameworkPropertyMetadata((int)0, 
       FrameworkPropertyMetadataOptions.None)); 

    public static readonly DependencyProperty ReadOnlyPropProperty 
     = ReadOnlyPropPropertyKey.DependencyProperty; 

    public int ReadOnlyProp 
    { 
     get { return (int)GetValue(ReadOnlyPropProperty); } 
     protected set { SetValue(ReadOnlyPropPropertyKey, value); } 
    } 

    //your other code here ... 
} 

Bạn sử dụng phím chỉ khi bạn thiết lập giá trị một cách riêng tư bảo vệ mã// nội bộ. Do thiết bị bảo vệ ReadOnlyProp được bảo vệ, điều này minh bạch đối với bạn.

+0

Đây không phải là mã hoàn chỉnh. – Developer

+1

@Singh, ý của bạn là "chưa hoàn thành"? –

+0

Bạn không đề cập đến Public Class OwnerClass. Nếu bất kỳ nhà phát triển mới nào nhìn thấy mã này thì anh ta sẽ nhầm lẫn về OwnerClass là gì. Vì vậy, hãy cập nhật nó. – Developer

Các vấn đề liên quan