WPF - 公开可绑定的ReadOnly依赖属性并添加内部值

时间:2011-01-13 20:43:11

标签: wpf dependencies properties set readonly

这是我的代码:

 public static readonly DependencyPropertyKey ItemsSourceKey =
            DependencyProperty.RegisterReadOnly("ItemsSource", typeof(List<string>), typeof(MyTextBox), null);


        public static readonly DependencyProperty ItemsSourceProperty = ItemsSourceKey.DependencyProperty;
        public List<string> ItemsSource
        {
            get { return (List<string>)GetValue(ItemsSourceProperty); }
        }

我有两个问题:

1。)由于我在MSDN上建议使用了DependencyPropertyKey,我在XAML中看不到ItemsSource。

2。)用户应该能够绑定到List,获取MyTextBox控件的ItemsSource中的当前字符串。在MyTextBox内部,我想向ItemsSource添加字符串,但是我无法创建List的实例并将其分配给ItemsSource,因为它是ReadOnly ...

我该如何解决?我想要一个可绑定的只读属性,我可以在内部设置数据。也许你问为什么我不使用.Text属性绑定那里。那么用户输入数据,我改变它并希望在列表中返回它...

2 个答案:

答案 0 :(得分:1)

通过使用两个单独的属性在ItemsControl中解决此问题:ItemsSource for Binding,Items作为用于实际显示数据的只读集合对象。由于ItemsControl已经为您处理这些集合并执行所有必要的更新,因此如果您需要此行为,则应从ItemsControl派生。如果您需要ItemsControl和TextBox的行为,您可以创建一个控件,它是两者的复合,并将属性传递给内部控件,或者创建两个相互协作的相关派生控件(一个ItemsControl,一个TextBox)。

答案 1 :(得分:0)

  

我该如何解决?我想要一个   bindable readonly我所属的属性   可以在内部设置数据。也许你问   为什么我不使用.Text属性   绑在那里。那么用户输入数据,   我改变它并想要归还它   在列表中更改...

如果您只是需要修改数据,可以使用转换器。