WPF - Предоставьте привязываемое свойство зависимости ReadOnly и добавьте внутренние значения - PullRequest
1 голос
/ 13 января 2011

Вот мой код:

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

У меня здесь 2 проблемы:

1.) Поскольку я сделал его DependencyPropertyKey, как это предлагается в MSDN, я больше не вижу ItemsSource в моем XAML.

2.) Пользователь должен иметь возможность привязываться к списку, получая текущие строки в элементе ItemsSource элемента управления MyTextBox. Внутри MyTextBox я хочу добавить строки в ItemsSource, но не могу создать экземпляр List и назначить его в ItemsSource, так как он доступен только для чтения ...

Как я могу решить это? Я хочу привязываемое свойство только для чтения, к которому я могу установить данные внутри. Может быть, вы спросите, почему я не использую свойство .Text для привязки там. Ну, пользователь вводит данные, я изменяю их и хочу вернуть их в списке ...

Ответы [ 2 ]

1 голос
/ 14 января 2011

Эта проблема решается в ItemsControl с помощью двух отдельных свойств: ItemsSource для привязки, Items как объект коллекции только для чтения, используемый для фактического отображения данных. Так как ItemsControl уже обрабатывает подключение этих коллекций для вас и выполняет все необходимые обновления, если вы хотите, чтобы такое поведение было производным от ItemsControl. Если вам нужно поведение обоих ItemsControl и TextBox, вы можете либо создать элемент управления, который представляет собой совокупность обоих и проходит через свойства к внутренним элементам управления, либо создать два связанных производных элемента управления (один ItemsControl, один TextBox), которые работают друг с другом.

0 голосов
/ 14 января 2011

Как я могу решить это? я хочу привязываемое свойство только для чтения, к которому я может установить данные внутри. Может быть, вы спросите почему я не использую свойство .Text для привязать там. Ну, пользователь вводит данные, Я изменяю это и хочу вернуть это изменено в списке ...

Если вам просто нужно изменить ваши данные, вы можете использовать конвертер для этого.

...