0

我已经使用 and 组合了一个 WPF 应用程序ObservableCollectionDependency Properties这很酷,因为我只需向其中添加一个项目ObservableCollection,它就会自动显示,例如,我将集合中的对象显示为包装面板中屏幕上的框,每个框都显示其Title.

所以我想让每个项目不仅显示它的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);
        }
    }
}
4

2 回答 2

2

TitleProperty 不是普通属性,而是依赖属性,所以如果你想检索 TitleProperty 的值,你必须这样做:

var title = (string)GetValue(TitleProperty);

在 WPF 指南中,访问依赖属性的公共属性不被 WPF 和绑定引擎调用(不是必需的)。此公共属性仅供您的代码使用。因此,您不得在公共财产中添加代码逻辑。

但是您可以在注册 DP 并提供 CoerceValueCallback 以更改设置值时使用 FrameworkPropertyMetadata。

您还可以在绑定中使用 IValueConverter。

于 2009-02-09T13:42:18.210 回答
0

我得到这个为我工作:

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

您是否有理由在检索值时尝试修改该值,而不仅仅是在设置值时对其进行修改?

于 2009-02-09T14:23:35.957 回答