См. Привязки перед отладкой - PullRequest
0 голосов
/ 04 августа 2020

Можно ли увидеть привязку stati c перед отладкой?

Я уже пробовал с этим:

Background="{Binding Source={x:Static local:DataBase.TestFarbe}}"

и с этим:

Background="{Binding Source={x:Static local:DataBase.TestFarbe}}"

Я знаю, что

Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:UC_InfoHead}}, Path=TypeText}"

для привязки между Xaml и его классом уже работает

EDIT: как пример

Я создал UserControl с привязками:

enter image description here

Then when I add my UserControl to my Window введите описание изображения здесь

Я могу видеть свой текст, хотя это привязка

1 Ответ

0 голосов
/ 04 августа 2020

Конструктор не является прямым эквивалентом запуска приложения из соображений эффективности.

Одна из вещей, которые он не будет делать, - это создавать статические объекты, которые вы связали. Это означает, что просто привязка к stati c не будет работать в конструкторе.

Вы можете подумать, что если он объединяет словари ресурсов с помощью app.xaml, тогда «просто» создание экземпляра класса stati c кажется довольно простым . Однако им нужно где-то провести черту.

Следовательно, ваш третий пример работает, потому что разработчику нужно превратить xaml в пользовательский интерфейс, и эта привязка относится к свойству части пользовательского интерфейса, которая, таким образом, создается.

Привязка к stati c не

Ваши альтернативы включают:

  • Оберните свойство stati c в свойство viewmodel, где эта модель просмотра создается в xaml.

  • Предоставляет контекст данных времени разработки, который полностью имитирует данные или каким-то образом создает фиксированный экземпляр вашей модели просмотра.

  • FallbackValue и TargetNullValue в вашей привязке, чтобы задать «жестко запрограммированное» значение по умолчанию.

  • Напишите расширение разметки, которое будет читать stati c.

Последнее не так сложно, как кажется, если вам просто нужны данные только для чтения. MarkUpExtension имеет только один метод - ProvideValue для переопределения. Вам "просто" нужен класс, унаследованный от MarkUpExtension с этим методом:

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        // Return value from static class' property here.
    } 

Кажется, что вам нужен bru sh для фона, так что это предположительно только для чтения, а расширение разметки может быть лучший вариант.

...