@falc

Как осуществить доступ и изменение объекта класса Adorner в WPF?

Проблема в том, что я не могу спроектировать программу так, чтобы объект в виде коллекции можно было добавить в ComboBox.ItemsSource, если ComboBox находится в декоративном слое Adorner. Получается только с полем static, напрямую обратившись к классу.

Сам Adorner возникает над этим слоем:
<local:MyTextBlock Text="{Binding Name, Mode=TwoWay}" IsInEditMode="{Binding Edit, Mode=TwoWay}""/>

MyTextBlock - наследник TexBlock. В классе MyTextBlock есть событие начала редактирования, где создается этот декоративный слой MyAdorner:
private MyAdorner _adorner;
private static void IsInEditModeUpdate(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
   MyTextBlock myTextBlock = obj as MyTextBlock;
   AdornerLayer layer = AdornerLayer.GetAdornerLayer(MyTextBlock);
   MyTextBlock._adorner = new MyAdorner(myTextBlock);
   layer.Add(MyTextBlock._adorner);
}

Конструктор декоративного слоя MyAdorner выглядит так (визуально это будет комбобокс):
private readonly ComboBox _comboBox;
public MyAdorner(MyTextBlock adornedElement) : base(adornedElement)
        {
            _collection = new VisualCollection(this);
            _comboBox = new ComboBox();
            Binding binding = new Binding("Text") {Source = adornedElement};
            _comboBox.SetBinding(ComboBox.TextProperty, binding);
            _collection.Add(_comboBox);
         // Тут возникает проблема с dicResult - объектом словаря:
            DicParse dicParse = new DicParse(_comboBox.Text, dicResult);
            _comboBox.ItemsSource = dicParse;
        }

Мне нужно как-то передать этому адорнеру объект словаря dicResult, созданного в основном потоке программы. Я не понимаю, где это сделать, как вычленить объект адорнера в основном потоке, к тому же он зависит от MyTextBlock.

(DicParse - парсер словаря, возвращает коллекцию из пары слов.)

Общий вид данной части XAML, если нужно, добавлю.
  • Вопрос задан
  • 2922 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы