2013-10-22 3 views
0

배경지우기

나는 BindingTextBox에서 상속되는 새 컨트롤을 만드는 오전 뒤에 코드에서 FrameworkElement에 바인딩. 기본적으로 XAML에 추가 코드가 필요없는 ValidationRule이 하나 인 TextBox을 만들 수 있습니다. 그래서 대신 :

<TextBox> 
    <TextBox.Text> 
     <Binding Path="DisplayWidth" 
       Converter="{StaticResource DistanceUnitConverter}"> 
      <Binding.ValidationRules> 
       <valid:DoubleValidationRule/> 
      </Binding.ValidationRules> 
     </Binding> 
    </TextBox.Text> 
</TextBox> 

그것은 단순화 될 것이다 :

<ctrls:ValidateConvertTextBox BindingPath="DisplayWidth" 
           ValidationRule="{StaticResource DoubleValidationRule}" 
           ValueConverter="{StaticResource DistanceUnitConverter}"/> 

내가 사방에 이들의 무리가 있고 내가 좋아하는 뭔가를 사용하는 템플릿을 만들 수 없기 때문에 그 이유는 :

<Binding Path="{TemplateBinding Path}"> 
    ... 
</Binding> 

경로가 DependencyProperty가 아니기 때문에.

질문 뒤에 코드에서

, 나는이 새로운 바인딩을 만들려고 할 때, 나는이 같은 XAML 뭔가에 위의 3 개 종속성 속성이 있습니다

private void SetBindingPath(string value) 
{ 
    if(string.IsNullOrWhiteSpace(value)) return; 

    Binding = new Binding(value); 
    SetBinding(TextProperty, Binding); 
} 

private void SetValidationRule(ValidationRule value) 
{ 
    if(Binding != null) 
    { 
     Binding.ValidationRules.Clear(); 
     Binding.ValidationRules.Add(value); 

     SetBinding(TextProperty, Binding); 
    } 
} 

private void SetValueConverter(IValueConverter value) 
{ 
    if(Binding != null) 
    { 
     Binding.Converter = value; 
     SetBinding(TextProperty, Binding); 
    } 
} 

그리고 난을 SetBinding을 호출하면 이 TextProperty에 있거나 둘 다 Binding과 동일한 참조가되므로 SetBinding을 세 번 호출 할 필요가 없다고 궁금합니다. 또한 BindingPath 속성이 변경된 경우 (Binding이 이제 다른 곳을 가리키면 다시 바인딩하기 전에 이전 바인딩을 등록 취소해야합니까?) 그렇다면 어떻게해야합니까? 문서

답변

0

BindingOperations.ClearBinding (yourTextBox, TextBlock.TextProperty);