2012-05-09 13 views
6

Tôi đang học thuộc tính phụ thuộc. Tôi đọc nhiều bài viết & sách nhưng tôi vẫn chưa rõ.Lỗi thuộc tính phụ thuộc

Chương trình được hiển thị bên dưới là bài viết mà tôi đã viết để tìm hiểu. Một số lỗi trong đó, hãy giúp đỡ trong việc giải quyết. Tôi có câu hỏi.

  1. Việc sử dụng chính yếu tố thuộc tính phụ thuộc tùy chỉnh là thông báo thay đổi?
  2. Tôi tìm thấy mã 'IsDefaultProperty' cho Nút trong sách văn bản WPF. Nó có nghĩa là tài sản 'IsDefault' là thuộc tính phụ thuộc?
  3. Tại sao họ hiển thị mã đó? Nó có nghĩa là, trong nội bộ, trong lớp Button, nó được định nghĩa như thế? (Họ đã hiển thị mã nội bộ?) Hoặc họ đã cho biết cách xác định là tùy chỉnh?

Đây là mã của tôi:

namespace DependencyProperties 
{ 
    public class Contact 
    { 
     private int id=100; 
     private string name="shri"; 
     public static readonly DependencyProperty IsPresentProperty; 

     public int ID 
     { 
      get { return id; } 
     } 
     public string NAME 
     { 
      get { return name; } 
     } 

     static Contact() 
     { 
      IsPresentProperty = DependencyProperty.Register("IsPresent", typeof(bool),typeof(Contact),new FrameworkPropertyMetadata(false,new PropertyChangedCallback(OnIsPresentChanged))); 
     } 

     public bool Present 
     { 
      get { return (bool)GetValue(Contact.IsPresentProperty); } 
      set { SetValue(Contact.IsPresentProperty, value); } 
     } 

     private static void OnIsPresentChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) 
     { 

     } 
    } 
} 

Và tôi thấy lỗi:

> Error: GetValue and SetValue does not exist in the current context 

Trả lời

14

The main use of custom Dependency property element is for the notification of change?

Không, đó cũng có thể được sắp xếp bởi có lớp thực hiện INotifyPropertyChanged là tốt. Thuộc tính phụ thuộc để cung cấp thông báo thay đổi, nhưng lý do thực sự là một cái gì đó khác nhau. Xem Why dependency properties?How is the WPF property system economical?

I found an 'IsDefaultProperty' code for Button in a WPF text book. It means 'IsDefault' property is a dependency property?

Có. Đặt tên trường là "FooBarProperty" là quy ước WPF để xác định các thuộc tính phụ thuộc; bạn có thể kiểm tra tài liệu cho IsDefaultProperty để thấy rằng đó thực sự là thuộc tính phụ thuộc và thậm chí tài liệu IsDefault có phần được gọi là "thông tin thuộc tính phụ thuộc".

Why they shown that code? It means, internally, in Button class, its defined like that? (They showed internal code?) or they showed how to define as custom?

Tôi không chắc chắn những gì 'mà' mã, nhưng có, tài sản được gần như chắc chắn được xác định như thế trong Button ('gần như' bởi vì tôi không chắc chắn những gì bạn đang đề cập đến).

Error: GetValue and SetValue does not exist in the current context

Đó là vì bạn không có nguồn gốc từ DependencyObject.

12

DependencyProperty trường hợp phải được xác định trên các phiên bản DependencyObject. Vì vậy, lớp học của bạn phải lấy được từ DependencyObject hoặc một trong các lớp con của nó. Nhiều loại trong WPF lấy được từ điều này, bao gồm Button.

Vì vậy, để có được mã của bạn làm việc trong trường hợp này, bạn phải sử dụng:

public class Contact : DependencyObject 
{ 
    // ... 

Đây là lý do tại sao bạn nhận được một lỗi trên GetValueSetValue - chúng được định nghĩa trên DependencyObject.

+0

Cảm ơn mọi người. Đã giải quyết lỗi. – SHRI

+0

Rất hữu ích. Câu trả lời này nên có nhiều phiếu bầu hơn. –