Установка текста метки в XAML в строковую константу

У меня есть одна строковая константа, которую я должен повторно использовать в нескольких разных макетах XAML, поэтому вместо ее дублирования я хотел бы просто привязать ее к константе.

У меня есть класс, который определяет строку в С#:

public static class StringConstants
{
     public static string MyString { get { return "SomeConstant"; } }
}

Я хотел бы иметь возможность установить значение через XAML с помощью чего-то вроде следующего:

<Label Content="{Binding local:StringConstants.MyString}"/>

Это достижимо? Я искал примеры, но я нашел только образцы, которые включают некоторые изменения в коде программной части, и мне интересно, есть ли более простое решение только для XAML, если я знаю, что мне просто нужно установить значение один раз на основе на строковое значение, которое никогда не изменится.


person mtlynch    schedule 22.07.2011    source источник


Ответы (3)


Вы привязываетесь к статическому члену, поэтому вам следует использовать x:Static Markup Extension:

<Label Content="{Binding Source={x:Static local:StringConstants.MyString}}"/>

Согласно комментарию @HB, нет необходимости использовать Binding, поэтому его проще использовать:

<Label Content="{x:Static local:StringConstants.MyString}"/>
person Navid Rahmani    schedule 22.07.2011
comment
@Х.Б. Что посоветуете вместо этого? - person mtlynch; 22.07.2011
comment
@nonsensical101: Просто пропусти это: Content="{x:Static local:StringConstants.MyString}" - person H.B.; 22.07.2011
comment
К сожалению, это не работает для приложений UWP. У кого-нибудь есть идея, как это сделать для них? - person James Ko; 09.11.2016
comment
@Х.Б. Некоторые причины, по которым вы можете использовать привязку - форматированные строки. мультибиндинги, преобразование значений - person Gusdor; 25.01.2017

Поместите общедоступную статическую строку MyString в файл App.xaml.cs. Затем вы можете ссылаться на него следующим образом.

    Content="{Binding Source={x:Static Application.Current}, Path=MyString}" 
person paparazzo    schedule 22.07.2011

Если у вас есть константа внутри нестатического класса, это не работает.

Мое решение для привязки к константе внутри модели представления (MVVM). Он использует свойство геттера с меньшим количеством кода для переноса.

// view model
public const string MyString = "abc";
public string MyStringConst => MyString;

.

<!-- WPF -->    
<Label Content="{Binding MyStringConst, FallbackValue='abc'}" />

FallbackValue используется для предварительного просмотра конструктора.

person Beauty    schedule 07.07.2017