0

我已經放在一起使用ObservableCollectionDependency Properties這是很酷的WPF應用程序,因爲我只需要將項目添加到ObservableCollection,它會自動顯示,例如,我在集合中將對象顯示爲屏幕上的方框,每個方框顯示其TitleDependencyProperty陌生性

所以我想讓每個項目不僅顯示其Title加上前綴或後綴,但依賴對象屬性似乎甚至不被使用。我可以在其上放置一個斷點並且永遠不會到達。

任何人都可以啓發我,爲什麼,如果我添加文本到我的傳出屬性,該文本是從未見過?我已經讀過這個值實際上「不是存儲在對象中,而是存儲在WPF中」,但我不明白這意味着什麼。

爲什麼這個文本不會被看到從來沒有被依賴對象輸出?

public class ApplicationItem : DependencyObject 
{ 

    public string Title 
    { 
     get 
     { 
      return (string)GetValue("this text will NOT be seen: " + TitleProperty); 
     } 
     set 
     { 
      SetValue(TitleProperty, "this text will be seen: " + value); 
     } 
    } 
} 

回答

2

TitleProperty是不正常的財產,但依賴屬性,所以如果你想找回你的TitleProperty的價值,你必須做的:

var title = (string)GetValue(TitleProperty); 

在WPF方針,將公共財產訪問依賴屬性不被WPF和綁定引擎調用(不是必需的)。此公共屬性僅供您的代碼使用。所以你不能在公共屬性中添加代碼邏輯。

但是,您可以在註冊DP時使用FrameworkPropertyMetadata並提供CoerceValueCallback來更改設置的值。

您也可以在綁定中使用IValueConverter。

+0

好的,但我從XAML檢索它,例如, <... Property =「Text」Value =「{Binding Title}」/>所以我只能訪問公共屬性「Title」 – 2009-02-09 13:44:51

+0

Edvward,在WPF指南中,訪問Dependency屬性的公共屬性不會被調用WPF和綁定引擎(不是必需的)。此公共屬性僅供您的代碼使用。 所以你不能在公共屬性中添加代碼邏輯。 – 2009-02-09 15:13:00

0

我得到這個工作對我來說:

public string Title 
{ 
    get 
    { 
     string value = (string)GetValue(TitleProperty); 
     return value + " postfix"; 
    } 
    set 
    { 
     SetValue(TitleProperty, "Prefix " + value); 
    } 
} 

是否有一個理由,爲什麼你試圖檢索它的時候,而不是僅僅修改它,當值設置爲修改值?