2012-02-27 3 views
0

바인딩 소스를 사용하여 리소스 파일에서 채워지는 UI의 텍스트 블록이 있습니다. 이제 부울의 종속성 속성 유형을 첨부하여 true이면 텍스트 블록에 "(*)"기호를 연결합니다.UI 렌더링 후 첨부 된 속성 실행

런타임에 화면이로드되면 proeprty가 먼저 실행되고 텍스트가 리소스 파일에서 바인딩되기 전에 연결된 속성에 의해 추가 된 기호가 바인딩에 의해 무시됩니다.

종속성 Proerty

public static readonly DependencyProperty IsRequiredProperty = DependencyProperty.RegisterAttached("IsRequired", typeof(bool), typeof(RequiredIndicator), 
     new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsParentArrange, OnIsRequiredChanged)); 

XAML은

<TextBlock Text="{Binding Source={x:Static Resources:Resource.ColorTextBlockText}}" Grid.Column="1" Grid.Row="5" 
        Style="{StaticResource AdminScreenTextBlockStyle}" Resources:RequiredIndicator.IsRequired="True" /> 
+0

우리가 관련 XAML을 볼 수 나중에 DispatcherPriority보다 코드를 실행하는 Dispatcher를 사용할 수 있습니까? – NestorArturo

+0

이 XAML로 업데이트되었습니다. – pchajer

답변

0

당신은 정말 "올바른"순서로 업데이트 할 것을 강제 할 수 없다.

public static readonly DependencyProperty MyTextProperty = DependencyProperty.RegisterAttached("MyText", typeof(string), typeof(RequiredIndicator), 
     new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsParentArrange, OnIsRequiredChanged)); 

는 그런 다음 IsRequiredProperty의 조합을 사용하고 MyTextPropertyTextBlock.TextProperty을 설정 : 가장 좋은 건과 같은 다른 연결된 속성을 추가하는 것입니다. 그런 다음 MyTextProperty을 리소스로 설정합니다.

0

맞다면 리소스에서받은 텍스트를 변경하려고 시도하지만 텍스트 속성의 코드는 리소스 : RequiredIndicator.IsRequired = "True" 전에 실행됩니다. XAML에서 속성을 정렬하여 해결할 수있는 경우가 있습니다. 이것이 항상 보장받을 수있는 것은 아니기 때문에 이것은 선호되는 방법이 아닙니다. Text 속성이 값을 얻기 전에 Converter가 먼저 실행되도록 보장 된 것처럼 Magic이 할 수있는 것처럼 보입니다.

1

Converter을 사용하지 않으시겠습니까?

바운드 값을 수정하지 않으려면 실제 데이터 값의 끝에 (*)이 포함되거나 바인딩이 손실됩니다. 변환기는 바운드 값을 변환하여 표시 목적으로 만 끝까지 (*)을 추가합니다.

<TextBlock Text="{Binding 
       Source={x:Static Resources:Resource.ColorTextBlockText}, 
       Converter={StaticResource RequiredIndicatorConverter}" 
      Grid.Column="1" Grid.Row="5" 
      Style="{StaticResource AdminScreenTextBlockStyle}" /> 

그렇지 않으면, 당신은 시도하고 DispatcherPriority.Render

관련 문제