Доступ к переменной codebehind в XAML

Как я могу получить доступ к общедоступной переменной, которая в файле Sample.xaml.cs, например asp.net ?

Есть несколько способов сделать это.

  • Добавьте свою переменную в качестве ресурса из codebehind:

     myWindow.Resources.Add("myResourceKey", myVariable); 

    Затем вы можете получить к нему доступ из XAML:

      

    Если вам нужно добавить его после того, как XAML получит синтаксический DynamicResource , вы можете использовать DynamicResource выше вместо StaticResource .

  • Сделайте переменную свойством чего-то в вашем XAML. Обычно это работает через DataContext :

     myWindow.DataContext = myVariable; 

    или

     myWindow.MyProperty = myVariable; 

    После этого что-нибудь в вашем XAML может получить к нему доступ через Binding :

      

    или

      

Для привязки, если DataContext не используется, вы можете просто добавить это к конструктору кода:

 this.DataContext = this; 

Используя это, каждое свойство в коде становится доступным для привязки:

  

Другой способ – просто указать имя корневому элементу XAML:

 x:Name="root" 

Поскольку XAML скомпилирован как неполный class кода, мы можем получить доступ к каждому свойству по имени:

  

Примечание: доступ доступен только для свойств; а не полям. set; и get; или {Binding Mode = OneWay} . Если используется привязка OneWay, базовые данные должны реализовывать INotifyPropertyChanged .

Для быстрой и грязной Windows в WPF я предпочитаю привязывать DataContext windows к самому окну; все это можно сделать в XAML.

Window1.xaml

        

Window1.xaml.cs

 public partial class Window1 : Window { public static readonly DependencyProperty MyProperty2Property = DependencyProperty.Register("MyProperty2", typeof(string), typeof(Window1), new UIPropertyMetadata(string.Empty)); public static readonly DependencyProperty MyProperty1Property = DependencyProperty.Register("MyProperty1", typeof(string), typeof(Window1), new UIPropertyMetadata(string.Empty)); public Window1() { InitializeComponent(); } public string MyProperty1 { get { return (string)GetValue(MyProperty1Property); } set { SetValue(MyProperty1Property, value); } } public string MyProperty2 { get { return (string)GetValue(MyProperty2Property); } set { SetValue(MyProperty2Property, value); } } private void Button_Click(object sender, RoutedEventArgs e) { // Set MyProperty1 and 2 this.MyProperty1 = "Hello"; this.MyProperty2 = "World"; } } 

В приведенном выше примере обратите внимание на привязку, используемую в свойстве DataContext в окне, это говорит: «Установите свой контекст данных для себя». Два текстовых блока привязаны к MyProperty1 и MyProperty2 , обработчик события для этой кнопки будет устанавливать эти значения, которые автоматически распространяются на свойство Text двух текстовых блоков, так как свойствами являются свойства зависимостей.

Также стоит отметить, что «привязка» может быть установлена ​​только на DependencyProperty объекта DependencyObject. Если вы хотите установить свойство Non DependencyProperty (например, нормальное свойство) для объекта в XAML, тогда вам придется использовать первый метод Роберта использования ресурсов в коде позади.

  • Как использовать привязки WPF с RelativeSource?
  • Можно ли выбрать текстовый блок WPF?
  • Вызывающий stream должен быть STA, потому что многие компоненты пользовательского интерфейса требуют этого
  • Как получить размер текущего экрана в WPF?
  • Как заставить WPF использовать URI ресурсов, которые используют сильное имя сборки? Argh!
  • Передача значения enums в качестве параметра команды из XAML
  • Как создать пользовательский элемент управления WPF с содержимым NAMED
  • Как создать WPat Datagrid с неизвестным количеством столбцов
  • Связывание Datagrid в WPF
  • Как создать вкладки трапеции в элементе управления вкладками WPF
  • Как вы привязываете CollectionContainer к коллекции в модели представления?
  • Interesting Posts

    Как извлечь неполный 7-Zip-файл?

    Как форматировать вывод печати или строку в фиксированную ширину?

    Вызов метода на стороне сервера ASP.NET через jQuery

    Как я могу десериализовать объект, если он был перемещен в другой пакет или переименован?

    Что такое опция -fPIE для независимых по позиции исполняемых файлов в gcc и ld?

    Как скомпилировать для OS X в Linux или Windows?

    Как я могу остановить MySQL-запрос, если он занимает слишком много времени?

    Как создать контекстное меню для RecyclerView

    Получение IP-адреса клиента: REMOTE_ADDR, HTTP_X_FORWARDED_FOR, что еще может быть полезно?

    JSP: тег JSTL

    Самостоятельное размещение ошибок плагина JQuery Validation

    Как написать Java-enum-подобный class с несколькими полями данных в C ++?

    GVim не является источником .bashrc, .bash_profile или .profile из неинтерактивной оболочки без входа

    Как декодировать поле полилиний API Google Directions в длинные точки lat в объективе C для iPhone?

    Почему я должен устанавливать драйверы оборудования, если мой компьютер работает нормально?

    Давайте будем гением компьютера.