2010-08-22 2 views
2

Я использую Expression Blend.Как привязать TextBox к свойству в CodeBehind

Скажем, я получил:

Public string FirstName{get;set;} 

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

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

+0

Если я правильно понял ваш новый вопрос правильно, вы хотите привязать к свойству кода-за использованием только интерфейс наложения? Без предварительной настройки datacontext для страницы я не думаю, что вы можете. –

+1

+1, не вижу причины проголосовать. Хотя это не строгое программирование, оно по-прежнему актуально. – DMan

+0

@HiTech Magic - я не возражаю, что единственный код будет устанавливать datacontext. – Erez

ответ

4

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

Результат таков:

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

Я думаю, это самое близкое решение для моего isue – Erez

5

Вы действительно хотите разместить свойство на View Model и использовать привязку XAML, но это еще одна история.

Как вы описали свой пример, сначала вам нужно реализовать свойство «FirstName» как свойство зависимостей, а не просто get/set. Here is a great code-snippet from Shawn Wildermuth, чтобы сохранить много ввода (есть одна опечатка в фрагменте, который вам нужно исправить - «($ 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 
     } 
    } 
} 
Смежные вопросы