2016-10-25 6 views
1

データバインディングを使用してバインディングの文字列形式を更新したかったのですが、だから、僕はこれを行うことを考えた:WPFバインディングが適用されていない - どうしてですか?

<TextBlock Text="{Binding Foo.Name}" Margin="3"> 
        <TextBlock.Style> 
        <Style TargetType="TextBlock"> 
         <Setter Property="Text" Value="{Binding Path=., StringFormat='Start {0}'}" /> 
         <Style.Triggers> 
         <DataTrigger Binding="{Binding Foo.IsEnabled}" Value="True"> 
         <Setter Property="Text" Value="{Binding Path=., StringFormat='Stop {0}'}" /> 
         </DataTrigger> 
         </Style.Triggers> 
        </Style> 
        </TextBlock.Style> 
       </TextBlock> 

は今、これはちょうどFoo.Nameの値を示していない適用される文字列形式(文字列「停止」/「開始」)で。

コードを修正して機能させました。これは作業コードです

ここで、最初のコードが機能しない理由と、2番目のコードが機能する理由を探しています。 DataTriggerでは、オブジェクト自体のプロパティを介してプロパティが既に設定されているため、DataTriggerのSetterでプロパティ値を設定または変更できないDataTemplatesで同様の動作が発生しました。オブジェクト自体からプロパティを削除し、それをスタイルとして設定したときにのみ機能しました。

これはWPFの単なる制限ですか?

+3

[依存プロパティの値の優先順位](https://msdn.microsoft.com/en-us/library/ms743230(v = vs.100).aspx)です。スタイル・セッター値 – ASh

+0

よりローカル値( 'Text =" {Binding Foo.Name} ")の方が重要です。このため、最初の例のdatatrigger" stop "もこの優先順位のために適用されませんか? – juFo

+1

スタイル設定子は#8、スタイルトリガは#6、ローカル値は#3になります。 – ASh

答えて

関連する問題