Мне трудно связать простое статическое свойство строки с TextBox.
Вот класс со статическим свойством:
public class VersionManager
{
private static string filterString;
public static string FilterString
{
get { return filterString; }
set { filterString = value; }
}
}
В моем xaml я просто хочу связать это статическое свойство с TextBox:
<TextBox>
<TextBox.Text>
<Binding Source="{x:Static local:VersionManager.FilterString}"/>
</TextBox.Text>
</TextBox>
Все компилируется, но во время выполнения я получаю следующее исключение:
Невозможно преобразовать значение в атрибуте «Источник» в объект типа «System.Windows.Markup.StaticExtension». Ошибка в объекте «System.Windows.Data.Binding» в файле разметки «BurnDisk; component / selectversionpagefunction.xaml» Строка 57 Позиция 29.
Есть идеи, что я делаю не так?
источник
Вы не можете привязать к такой статике. Инфраструктура привязки не может получать уведомления об обновлениях, так как она не задействована
DependencyObject
(или экземпляр объекта, который реализуетINotifyPropertyChanged
).Если это значение не меняется, просто отмените привязку и используйте
x:Static
непосредственно внутриText
свойства. Определитеapp
ниже, чтобы быть местоположением пространства имен (и сборки) класса VersionManager.Если значение действительно меняется, я бы предложил создать синглтон, содержащий значение и привязанный к нему.
Пример синглтона:
источник
В .NET 4.5 можно привязывать к статическим свойствам, подробнее
источник
Начиная с WPF 4.5, вы можете связывать напрямую со статическими свойствами и автоматически обновлять привязку при изменении вашего свойства. Вам необходимо вручную подключить событие изменения, чтобы вызвать обновления привязки.
Теперь вы можете связать свое статическое свойство, как и любое другое:
источник
VersionManager
Класс может быть статическим , и все еще работает. Обратите внимание на фигурные скобки в определении путиPath=(local:VersionManager.FilterString)
. Кто-нибудь знает, зачем они на самом деле нужны?Может быть два способа / синтаксиса для привязки
static
свойства. Если р являетсяstatic
свойство в классеMainWindow
, тоbinding
дляtextbox
будет:1.
2.
источник
Вы можете использовать
ObjectDataProvider
класс и егоMethodName
свойство. Это может выглядеть так:Заявленный объект данных провайдера можно использовать так:
источник
Если вы используете локальные ресурсы, вы можете ссылаться на них, как показано ниже:
источник
Правильный вариант для .NET 4.5 +
Код C #
Привязка к XAML (внимание к скобкам: (), а не {})
источник
Посмотрите на мой проект CalcBinding , который предоставляет вам написание сложных выражений в значении свойства Path, включая статические свойства, свойства источника, Math и другие. Итак, вы можете написать это:
Удачи!
источник
Все эти ответы хороши, если вы хотите следовать хорошим соглашениям, но OP хотел чего-то простого , чего я и хотел, вместо того, чтобы иметь дело с шаблонами проектирования GUI. Если все, что вам нужно сделать, это добавить строку в базовое приложение с графическим интерфейсом, вы можете обновить ad-hoc без каких-либо сложностей, вы можете просто получить к ней доступ прямо в исходном коде C #.
Допустим, у вас есть действительно простое приложение WPF MainWindow XAML, как это,
Это будет выглядеть примерно так:
В исходном коде вашего MainWindow XAML у вас может быть что-то вроде этого, где все, что мы делаем, изменяя значение напрямую через
textBlock.Text
sget
/set
functions:Затем, когда вы запускаете это событие, нажав кнопку, вуаля! Килрой появляется :)
источник
Другое решение заключается в создании нормального класса, который реализует PropertyChanger следующим образом
Затем создайте статический экземпляр класса, где вы не будете
А теперь используйте его как статическое свойство
А вот реализация PropertyChanger, если это необходимо
источник
Самый простой ответ (.net 4.5 и выше):
и XAML:
Не пренебрегайте скобками
источник