DependencyProperty奇怪

时间:2009-02-09 13:36:56

标签: wpf data-binding dependency-properties observablecollection

我使用ObservableCollectionDependency 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);
        }
    }
}

2 个答案:

答案 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); 
    }
}

是否有理由在检索时尝试修改该值而不是仅在设置值时修改该值?