2012-02-29 46 views
8

Tôi có 2 thuộc tính cho một lớp (điều khiển WPF): HorizontalOffsetVerticalOffset (cả hai đều là số Double của công chúng). Tôi muốn gọi một phương thức bất cứ khi nào các thuộc tính này thay đổi. Tôi có thể làm cái này như thế nào? Tôi biết một cách - nhưng tôi khá chắc chắn nó không phải là cách đúng (sử dụng DispatcherTimer của khoảng thời gian đánh dấu rất ngắn để theo dõi tài sản).Theo dõi thay đổi trong thuộc tính

CHỈNH SỬA ĐỂ BIẾT THÊM TIẾP THEO:

Thuộc tính này thuộc về điều khiển lịch trình telerik.

+1

Sử dụng các sự kiện? http://msdn.microsoft.com/en-us/library/awbftdfh.aspx –

+0

Tôi biết cách đăng ký các sự kiện hiện tại - nhưng tôi không có kinh nghiệm với việc tạo sự kiện của riêng tôi đã sẵn sàng cho đăng ký - điều này có khả thi không? Đây có phải là cách bạn nói là hiệu quả nhất cho những gì tôi muốn đạt được ở đây? –

+2

Vâng, cho rằng đây là hai thuộc tính trên một loại bạn không sở hữu; bạn cần phải xem cơ chế nào, nếu có, Telerik đã tiếp xúc với bộ điều khiển để giám sát các thuộc tính đó. Cho nó là WPF, tôi đã nghĩ rằng nó là 'INotifyPropertyChanged'. Trong trường hợp này, bạn không phơi bày nguồn sự kiện của riêng mình, bạn cần phải hy vọng rằng sự kiện đã tồn tại trên điều khiển đó –

Trả lời

17

đòn bẩy thực hiện giao diện INotifyPropertyChanged của điều khiển.

Nếu kiểm soát được gọi là myScheduleView:

//subscribe to the event (usually added via the designer, in fairness) 
myScheduleView.PropertyChanged += new PropertyChangedEventHandler(
    myScheduleView_PropertyChanged); 

private void myScheduleView_PropertyChanged(Object sender, 
    PropertyChangedEventArgs e) 
{ 
    if(e.PropertyName == "HorizontalOffset" || 
    e.PropertyName == "VerticalOffset") 
    { 
    //TODO: something 
    } 
} 
+0

Hoàn hảo, chỉ là những gì tôi đã được sau khi giao phối - cảm ơn. –

5

tôi biết một cách ... DispatcherTimer

Wow tránh điều đó :) INotifyPropertyChange giao diện là bạn của bạn. Xem the msdn để lấy mẫu.

Bạn về cơ bản kích hoạt sự kiện (thường được gọi là onPropertyChanged) trên số Setter thuộc tính của bạn và người đăng ký xử lý nó.

một thực hiện ví dụ từ msdn đi:

// This is a simple customer class that 
// implements the IPropertyChange interface. 
public class DemoCustomer : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged;  
    private void NotifyPropertyChanged(String info) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(info));    
    } 

    public string CustomerName 
    { 
     //getter 
     set 
     { 
      if (value != this.customerNameValue) 
      { 
       this.customerNameValue = value; 
       NotifyPropertyChanged("CustomerName"); 
      } 
     } 
    } 
} 
+0

Cảm ơn Zortkun, xin vui lòng xem chỉnh sửa của tôi trong OP (đó là một lớp/kiểm soát tôi không thể chỉnh sửa) - câu trả lời của bạn vẫn áp dụng? Tôi sẽ xem xét INotifyPropertyChange ngay bây giờ. –

+1

Tôi không quen thuộc với các công cụ Telerik, Daniel.But Trong ý kiến ​​tôi thấy bạn hỏi về cách các sự kiện có thể được tạo ra, tôi đăng một chỉnh sửa cho điều đó. @Andras Zoltan dường như có câu trả lời tho của bạn. :) –

+0

Cảm ơn một lần nữa Zortkun –

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