2010-08-22 7 views
2

Expression Blend를 사용하고 있습니다.CodeBehind에서 TextBox를 속성에 데이터 바인딩하는 방법

의 내가 가지고 있다고 가정 해 봅시다 :

Public string FirstName{get;set;} 

편집 : 답변 주셔서 감사합니다,하지만 난 두려워 사람들이 내 질문을 이해하지 못했다입니다. 코드 또는 XAML에서 데이터를 바인딩하는 방법을 알고 있습니다.

직접 작성하지 않고 Expression Blend Interface로 모든 작업을 수행 할 수있는 방법이 있다면 제 질문입니다. 마우스 움직임 만 있습니다.

+0

내가 올바르게 새로운 질문을 이해한다면, 당신은 코드 숨김에만 혼합 인터페이스를 사용하는 속성에 바인딩 할? 페이지에 대한 datacontext를 먼저 설정하지 않으면 나는 할 수 있다고 생각하지 않습니다. –

+1

+1, 투표 실패 이유를 모르겠다. 엄격하게 프로그래밍하지는 않지만 여전히 관련이 있습니다. – DMan

+0

@HiTech Magic - 유일한 코드가 datacontext를 설정하는 것에 신경 쓰지 않습니다. – Erez

답변

4

의 '데이터'탭> 새 샘플 데이터 ..> 이름 데이터 원본, 원하는대로 'MySampleDataSource'. 그런 다음 'MySampleDataSource'에는 3 개의 옵션이있는 '+'버튼 (오른쪽에 동일한 데이터 탭)이 있습니다. '간단한 속성 추가'를 선택하고 이름을 '이름'으로 지정하십시오. 그런 다음 해당 속성을 TextBox 또는 TextBlock으로 드래그합니다.

결과는 다음과 같다 :

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

내 생각에 가장 가까운 솔루션이라고 생각합니다. – Erez

5

실제로보기 모델에 속성을 넣고 XAML 바인딩을 사용하려고하지만 다른 이야기입니다.

예제를 설명 할 때 먼저 "FirstName"속성을 간단한 가져 오기/설정이 아닌 종속 속성으로 구현해야합니다. Here is a great code-snippet from Shawn Wildermuth 많은 타이핑을 저장해야합니다 ("$ type $) args. NewValue"... NewValue가 스 니펫에 대소 문자를 잘못 입력했습니다.) 수정해야하는 스 니펫에 오타가 하나 있습니다.

XAML에서 간단한 가져 오기/설정 속성에 바인딩 할 수 있지만 단방향/한 번 바인딩이므로 변경 내용으로 업데이트되지 않습니다.

코드에서 바인딩에는 두 가지 설정이 필요합니다.

  • 컨트롤에 데이터 바인딩을 설정 제어 (또는 페이지) 및
  • 의 DataContext에 설정. 당신은 당신이 같은 코드를 사용할 수 있습니다 언급 예를 들어

합니다 (XAML에서합니다 MyTextBox라는 TextBox 컨트롤 가정합니다) 다음

혼합 4에서
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 
     } 
    } 
} 
관련 문제