배경지우기
나는 Binding
랩 TextBox
에서 상속되는 새 컨트롤을 만드는 오전 뒤에 코드에서 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
이 이제 다른 곳을 가리키면 다시 바인딩하기 전에 이전 바인딩을 등록 취소해야합니까?) 그렇다면 어떻게해야합니까? 문서