Проблема в том, что я не могу спроектировать программу так, чтобы объект в виде коллекции можно было добавить в 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, если нужно, добавлю.