2011-02-07 7 views
2

"추가"버튼이있는 텍스트 상자 (textBox1)가 포함 된 TextBoxAndMore라는 사용자 정의 컨트롤이 있습니다. 이 사용자 정의 컨트롤에는 Text라는 속성이 있습니다. 이 Text 속성을 사용하여 텍스트 상자의 텍스트를 미러링합니다.내 사용자 정의 컨트롤에서 바인딩이 작동하지 않습니다.

내 XAML에서이 같은, 내 뷰 모델에 설명라는 문자열 속성에 바인딩 할 수 있도록이 속성은 바인딩 싶습니다

:

<my:TextBoxAndMore Text="{Binding Path=Description}" /> 

을 그래서 코드를 다음있다 ()이 propdb 조각에 의해 생성 : 텍스트 상자에, 내가 TextChanged 이벤트 핸들러 인 아이디어에 부착이 코드를 가지고,

// Using a DependencyProperty as the backing store for Text. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty TextProperty = 
     DependencyProperty.Register("Text", typeof(String), typeof(TextBoxAndMore), 
     new UIPropertyMetadata(String.Empty)); 

    public String Text 
    { 
     get { return (String)GetValue(TextProperty); } 
     set { SetValue(TextProperty, value); } 
    } 

그리고 그 때 텍스트 상자에 사용자 유형이 사용자의 Text 속성 제어권 변경 :

private void textBox1_TextChanged(object sender, TextChangedEventArgs e) 
    { 
     Text = textBox1.Text; 
    } 

그러나 최종 결과는 바인딩이 작동하지 않는 것입니다. 출력 창에 오류가 없으며 내 ViewModel의 Description 속성이 설정되지 않습니다 (null로 유지됨).

분명히 분명하지만 WPF를 처음 접했고 몇 가지 지침을 고맙게 생각합니다. 또한 컨트롤에 TextChanged 이벤트 코드를 제거하고 또한 컨트롤의 Text 속성에 바인딩 양방향을 사용할 수

<my:TextBoxAndMore Text="{Binding Path=Description Mode=TwoWay}" /> 

:

+1

대신 변경할 바인딩은 'TwoWay'가되어 사용자가 만든 업데이트가 자동으로 속성으로 돌아갑니다. – Gabe

+0

고맙습니다. XAML을 ''로 변경했으나 여전히 같은 문제가있는 것 같습니다. – Matt

답변

2

난 당신이 바인딩이 방향을 구성 할 필요가 있다고 생각합니다.

편집 :

< - 바인딩> == 양방향 ... <

TextBlockInControlsTemplate -> TextDepPropInControl < -`TextChanged` 핸들러> DescriptionPropInVM

+0

+1 : Nice, OneWay 바인딩이 기본 모드입니다. o) –

+0

고마워요. 내 XAML을 이것으로 변경했지만 TextChanged 이벤트 코드가 있는지 여부에 관계없이 내 ViewModel의 설명 속성이 여전히 null로 유지되고 누락 될 수있는 사항이 있습니까? – Matt

+0

글쎄,이 유형의 설치에서는 VM의 설명이 null이 아니어야합니다 (제 생각에는 ??). 빈 문자열 또는 일부 유형의 기본값으로 설정해야합니다. 궁극적으로 이것은 유일한 실제 문자열이며 다른 모든 것은 포인터입니다 (적어도 논리적으로는). – Aardvark

관련 문제