集合类型依赖属性 - 无法摆脱单例

时间:2012-07-14 17:42:19

标签: c# wpf data-binding dependency-properties

晚上好!

我有一个继承自WPF扩展工具包的richTextBox的类,我在其中添加了ObservableCollection类型的依赖项属性和正确的包装器。 我想使用此属性来存储InlineUIContainers的文本,我将其添加到FlowDocument并将它们数据绑定到ObservableCollection变量。

我的问题是这个richTextBox的所有实例都将它们的数据存储在同一个地方(单例)。

我尝试过使用List,在构造函数中初始化属性(如下面的代码示例中所示) - 也使用SetValue。我已将FrameworkMetadataProperty默认值设置为null并且仍然没有运气(在这种情况下,它实际上给了我"对象未初始化"尝试添加项目时出错)。

我已经没有想法了。我在过去的两个小时里一直在谷歌搜索它,但我仍然无法弄清楚为什么实例不能独立存储这些值。

非常感谢任何帮助。

public class RichTextBoxWithDataBoundableTokens : Xceed.Wpf.Toolkit.RichTextBox
{ 
    public static readonly DependencyProperty TokensContentsProperty = DependencyProperty.Register("TokensContents", typeof(ObservableCollection<object>), typeof(RichTextBox), new FrameworkPropertyMetadata(new ObservableCollection<object>()));
    public ObservableCollection<object> TokensContents { get { return (ObservableCollection<object>)GetValue(TokensContentsProperty); } set { SetValue(TokensContentsProperty, (ObservableCollection<object>)value); } }

    public RichTextBoxWithDataBoundableTokens()
        : base()
    {
        TokensContents = new ObservableCollection<object>();
    }
}

这就是我使用Control的方式:

    RichTextBoxWithDataBoundableTokens test = new RichTextBoxWithDataBoundableTokens()
    test.TokensContents.Add("some object"); 

1 个答案:

答案 0 :(得分:0)

在Register方法中设置typeOf(RichTextBoxWithDataBoundableTokens)而不是typeOf(RichTextBox)。我希望这会有所帮助。