Как привязать TextBox к свойству в CodeBehind - PullRequest
2 голосов
/ 22 августа 2010

Я использую Expression Blend.

Допустим, я получил:

Public string FirstName{get;set;}

Редактировать: спасибо за ответы, но, боюсь, люди не поняли мой вопрос.Я знаю, как связывать данные в коде или в XAML.

У меня вопрос, есть ли способ сделать все это с помощью интерфейса Expression Blend, не записывая его напрямую.Только движениями мыши.

Ответы [ 2 ]

5 голосов
/ 22 августа 2010

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

Когда вы описываете свой пример, вам сначала нужно реализовать свойство "FirstName"как свойство зависимости, а не просто получить / установить. Вот отличный фрагмент кода от Шона Вильдермута для экономии большого количества операций ввода (во фрагменте нужно исправить только одну опечатку - "($ type $) args. NewValue ; "... NewValue имеет неправильный регистр во фрагменте).

Вы можете связать в XAML с простым свойством get / set, но это односторонняя / одноразовая привязка и не будет обновлятьсяс изменениями.

В коде привязка требует установки двух вещей.

  • Установите DataContext элемента управления (или страницы) и
  • Установите привязку данных к элементу управления.

В качестве примера вы упомянули васможет использовать код, подобный следующему (предполагается, что элемент управления TextBox с именем myTextBox в Xaml):

using System.Windows;
using System.Windows.Controls;

namespace BindingCodeTest
{
    public partial class BindingCode : UserControl
    {
        public string FirstName
        {
            get { return (string)GetValue(FirstNameProperty); }
            set { SetValue(FirstNameProperty, value); }
        }

        // Using a DependencyProperty as the backing store for FirstName.  
        // This enables animation, styling, binding, etc...
        public static readonly DependencyProperty FirstNameProperty =
        DependencyProperty.Register("FirstName",
                                     typeof(string),
                                     typeof(BindingCode),
                                     new PropertyMetadata(string.Empty,
                                     new PropertyChangedCallback(OnFirstNameChanged)));

        static void OnFirstNameChanged(object sender, DependencyPropertyChangedEventArgs args)
        {
            // Get reference to self
            BindingCode source = (BindingCode)sender;

            // Add Handling Code
            string newValue = (string)args.NewValue;
        }

        public BindingCode()
        {
            InitializeComponent();
            myTextBox.DataContext = this;
            myTextBox.SetBinding(TextBox.TextProperty, new System.Windows.Data.Binding("FirstName"));
            FirstName = "First name";    // Sample change
        }
    }
}
4 голосов
/ 23 августа 2010

В Blend 4 на вкладке «Данные»> «Новый образец данных»> укажите имя источника данных, как вам нравится, например 'MySampleDataSource. Тогда ваш «MySampleDataSource» будет иметь кнопку «+» (та же вкладка «Данные» справа) с 3 вариантами. Выберите «Добавить простое свойство» и назовите его «FirstName». Затем перетащите это свойство на свой TextBox или TextBlock.

Результат примерно такой:

<TextBlock x:Name="firstName" Text="{Binding FirstName}"/>
...