我使用ObservableCollection
和Dependency Properties
整理了一个WPF应用程序,这很酷,因为我只需要向ObservableCollection
添加一个项目,它就会自动显示,例如我在收集器中将对象显示为屏幕上的框,每个框显示其Title
。
那么我想让每个项目不仅显示其Title
加上前缀或后缀,而且似乎甚至没有使用Dependency Object属性。我可以给它一个断点,它永远不会到达。
任何人都可以告诉我为什么,如果我向我的传出属性添加文本,该文本从未见过?我已经读过这个值实际上“不是存储在对象中而是存储在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);
}
}
}
答案 0 :(得分:2)
TitleProperty不是普通属性,而是依赖属性,所以如果你想要检索TitleProperty的值,你必须这样做:
var title = (string)GetValue(TitleProperty);
在WPF指南中,WPF和绑定引擎(不必要)不调用访问依赖项属性的公共属性。此公共属性仅供您的代码使用。因此,您不得在公共财产中添加代码逻辑。
但是,当您注册DP并提供CoerceValueCallback来更改设置值时,您可以使用FrameworkPropertyMetadata。
您还可以将IValueConverter与绑定结合使用。
答案 1 :(得分:0)
我让这个为我工作:
public string Title
{
get
{
string value = (string)GetValue(TitleProperty);
return value + " postfix";
}
set
{
SetValue(TitleProperty, "Prefix " + value);
}
}
是否有理由在检索时尝试修改该值而不是仅在设置值时修改该值?