2010-10-01 28 views
5

Tôi có một ứng dụng WPF nơi tôi đang sử dụng thuộc tính phụ thuộc trong codebehind mà tôi muốn thiết lập thông qua khai báo XAML.WPF: Các khai báo thuộc tính XAML không được thiết lập thông qua Setters?

ví dụ:

<l:SelectControl StateType="A" Text="Hello"/> 

Vì vậy, trong ví dụ này tôi có một UserControl gọi SelectControl, trong đó có một tính chất gọi là StateType mà thao tác một số tài sản khác trong đó là setter.

Để giúp minh họa sự cố, tôi đã đặt một thuộc tính khác có tên là Text trong ví dụ, đọc tiếp và tôi sẽ giải thích thêm.

codebehind trích ...

public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(String), typeof(SelectControl)); 

public String Text 
{ 
    get { return (String)GetValue(TextProperty); } 
    set { SetValue(TextProperty, value); } 
} 

public static readonly DependencyProperty StateTypeProperty = DependencyProperty.Register("StateType", typeof(String), typeof(SelectControl)); 

public String StateType 
{ 
    get { return (String)GetValue(StateTypeProperty) } 
    set 
    { 
     switch (value) 
     { 
     case "A": 
      AnotherPropertyBoolean = true; 
      break; 
     case "B": 
      AnotherPropertyBoolean = false; 
      break; 
     default: 
     // this is only an example... 
     } 
    } 
} 

Bây giờ, nếu tôi đặt một breakpoint trên setter (đối với một trong hai StateType hoặc Text), nó quay ra nó không bao giờ thực hiện.

Tuy nhiên giá trị được khai báo cho Text, tức là "Hello" xuất hiện trong dữ liệu của nó bị ràng buộc TextBox và tất nhiên tôi ràng buộc điều khiển văn bản khác với giá trị của StateType.

Có ai biết điều gì đang xảy ra không?

Trả lời

13

"Trình bao bọc CLR" cho thuộc tính phụ thuộc chỉ được gọi khi được thực hiện thông qua mã. XAML phụ thuộc vào tên được chỉ định trong lệnh DependencyProperty.Register (...). Vì vậy, thay vì "mở rộng" logic của setter cho thuộc tính phụ thuộc của bạn như bạn đã làm ở trên, chỉ cần đặt logic tùy chỉnh của bạn trong một hàm PropertyChangedCallback.

+0

Đẹp nhất :) cảm ơn. – ocodo

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