У меня есть ситуация, где некоторое приложение, широкие значения хранятся как константы - это - требование, поскольку они необходимы в определениях атрибута (атрибуты должны решить во время компиляции, поэтому даже статические участники не работают).
Я хочу также смочь к, также снова используют эти значения в файлах XAML. Таким образом, если у меня есть свои константы как это:
public class MyConstants
{
public const string Constant1 = "Hello World";
}
Я хочу к одному пути, связывают их со средствами управления, определенными в XAML что-то вроде этого:
<TextBlock Text="{Binding MyConstants.Constant1}" />
Действительно ли это возможно прямым способом? Я просмотрел обязательные примеры, но, может казаться, не нахожу этот вид сценария.
Там, возможно, была бы некоторая работа вокруг, я мог сделать (возможно, привязка, переведенная в параметры для метода, который динамично вытягивает постоянное поле через отражение),
Вот подход, который я бы взял:-
Через XAML я бы использовал синтаксис StaticResource типа this:-
<TextBlock Text="{StaticResource MyConstants_Constant1}" />
Создал бы статический метод где-нибудь, который возвращает ResourceDictionary
и принимает в качестве параметра Type
. Функция использует отражение для перечисления множества открытых констант, которые она выставляет. Она добавляет строковое значение каждой константы в ResourceDictionary
, формулируя имя ключа из имени типа и имя Consts.
Во время передачи запуска приложения typeof(MyConstants)
к этой функции добавляется возвращенная ResourceDictionaries
в коллекцию в свойстве Application Resources MergedDictionaries
.
Теперь все статические ресурсы должны разрешаться корректно, нет необходимости вызывать какую-либо привязку или устанавливать какой-нибудь текст данных, чтобы это работало. Значение разрешается при разборе XAML.
.Вы можете сделать это, но только если вы реализуете свойство, которое возвращает константу. Связывание работает только со свойствами. Чтобы это работало, измените свое объявление на:
public class MyConstants
{
private const string constant1 = "Hello World";
public string Constant1 { get { return constant1; } }
}