2009-08-21 2 views
1

이미 게시 된 very similar question가 있습니다. 사실, 그 게시물의 대답의 결과는 정확히 내가 쓴 것이지만 코드를 삽입 할 코드 숨김이 없습니다. 우리의 모든 로직은 ViewModel에 캡슐화되어 있습니다. ViewModel은 특정 시각적 요소를 직접 참조하지 않기 때문에이 코드는 거기에 존재할 수 없습니다. 어떻게 든 XAML에서 이와 동일한 작업을 수행 할 수있는 방법이 있습니까? 아니면 코드 비하인드 파일을 강제로 생성해야하는 이유가 있습니까?XAML의 바운드 컨트롤에 대한 유효성 검사를 강제 하시겠습니까?

답변

1

당신은 첨부 properties..it와 함께 일을 시도 할 수는 조금 정교한하지만 그것은 다른 대답과 동일하지 않습니다, 그래서 난이 일을해야한다고 생각 :

public class DependencyPropertyCollection : List<DependencyProperty> 
{ } 

public static class ValidationUtil 
{ 
    public static readonly DependencyProperty ForceValidationProperty = 
     DependencyProperty.RegisterAttached("ForceValidation", typeof(DependencyPropertyCollection), typeof(ValidationUtil), new PropertyMetadata(OnForceValidationChanged)); 
    private static void OnForceValidationChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) 
    { 
     FrameworkElement element = (FrameworkElement)sender; 
     element.Loaded += OnElementLoaded; 
    } 

    private static void OnElementLoaded(object sender, RoutedEventArgs e) 
    { 
     FrameworkElement element = (FrameworkElement)sender; 
     element.Loaded -= OnElementLoaded; 
     foreach (DependencyProperty property in GetForceValidation(element)) 
      element.GetBindingExpression(property).UpdateSource(); 
    } 

    public static DependencyPropertyCollection GetForceValidation(DependencyObject obj) 
    { 
     return (DependencyPropertyCollection)obj.GetValue(ForceValidationProperty); 
    } 
    public static void SetForceValidation(DependencyObject obj, DependencyPropertyCollection value) 
    { 
     obj.SetValue(ForceValidationProperty, value); 
    } 
} 

그리고 당신은 다음과 같이 사용 :

<TextBlock Text="{Binding Text}"> 
    <local:ValidationUtil.ForceValidation> 
     <local:DependencyPropertyCollection> 
      <x:StaticExtension Member="TextBlock.TextProperty"/> 
     </local:DependencyPropertyCollection> 
    </local:ValidationUtil.ForceValidation> 
</TextBlock> 

컬렉션 안에는 유효성을 검사 할 바인딩이있는 각 DependencyProperty를 지정합니다.

관련 문제