Привязка к полю константы в Silverlight

У меня есть ситуация, где некоторое приложение, широкие значения хранятся как константы - это - требование, поскольку они необходимы в определениях атрибута (атрибуты должны решить во время компиляции, поэтому даже статические участники не работают).

Я хочу также смочь к, также снова используют эти значения в файлах XAML. Таким образом, если у меня есть свои константы как это:

public class MyConstants
{
   public const string Constant1 = "Hello World";
}

Я хочу к одному пути, связывают их со средствами управления, определенными в XAML что-то вроде этого:

<TextBlock Text="{Binding MyConstants.Constant1}" />

Действительно ли это возможно прямым способом? Я просмотрел обязательные примеры, но, может казаться, не нахожу этот вид сценария.

Там, возможно, была бы некоторая работа вокруг, я мог сделать (возможно, привязка, переведенная в параметры для метода, который динамично вытягивает постоянное поле через отражение),

5
задан David 21 December 2009 в 17:55
поделиться

2 ответа

Вот подход, который я бы взял:-

Через XAML я бы использовал синтаксис StaticResource типа this:-

<TextBlock Text="{StaticResource MyConstants_Constant1}" />

Создал бы статический метод где-нибудь, который возвращает ResourceDictionary и принимает в качестве параметра Type. Функция использует отражение для перечисления множества открытых констант, которые она выставляет. Она добавляет строковое значение каждой константы в ResourceDictionary, формулируя имя ключа из имени типа и имя Consts.

Во время передачи запуска приложения typeof(MyConstants) к этой функции добавляется возвращенная ResourceDictionaries в коллекцию в свойстве Application Resources MergedDictionaries.

Теперь все статические ресурсы должны разрешаться корректно, нет необходимости вызывать какую-либо привязку или устанавливать какой-нибудь текст данных, чтобы это работало. Значение разрешается при разборе XAML.

.
5
ответ дан 13 December 2019 в 22:09
поделиться

Вы можете сделать это, но только если вы реализуете свойство, которое возвращает константу. Связывание работает только со свойствами. Чтобы это работало, измените свое объявление на:

public class MyConstants
{
    private const string constant1 = "Hello World";
    public string Constant1 { get { return constant1; } }
}
4
ответ дан 13 December 2019 в 22:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: