2011-09-15 5 views
-2
<TextBlock.Visibility> 
    <mat:MatcherConverter> 
     <mat:Matcher MatchVisibility="Visible" DismatchVisibility="Collapsed"> 
      <mat:Matcher Value1="{Binding Boolean1}" Value2="True" ComparisonOperator="AND"/> 
      <mat:Matcher Value1="{Binding Boolean2}" Value2="True" ComparisonOperator="AND"/> 
     </mat:Matcher> 
    </mat:MatcherConverter> 
</TextBlock.Visibility> 

MarkupExtensionをベースクラスとした場合、どう思いますか? この場合、MatcherConverterになります。このクラスはすべてのマッチャーを再帰的に実行し、結果はブール値です。カスタムクラスを使用したコントロールの可視性を設定する

+0

あなたの目標は何ですか?あなたが言ったことは私には全く意味がありません。 –

+0

これは非常に曖昧です。何が問題なのですか?何を試してみましたか、それがどのようにうまくいかない/あなたの期待にマッチしましたか? –

+0

を可視性に変換する方法はわかりません。私はMarkupExtensionでこれに合理的な方法です、それから私はProvideValueメソッドでそれを変換することができます。 – kusi581

答えて

0

あなたはブール値は、あなたが(...、ChildrenValue1Value2に)評価したい結果を返すよりもMatcherでプロパティTheBooleanResultを作ることができます。次にIValueConverterにはMatcherが付き、TheBooleanResultになり、必要な可視性が返されます。

public class MatcherConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     Matcher m = (Matcher)value; 
     return m.TheBooleanResult ? Visibility.Visible : Visibility.Hidden; 
    } 
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

@ kusi581質問に対するあなたのコメント。 'Matcher'をusercontrolsリソース(おそらく' ObjectDataProvider')に置くことができます。次に、テキストボックスの可視性プロパティをそのリソースにバインドします。 [Example with ObjectDataProvider](http://bea.stollnitz.com/blog/?p=22) – erikH

+0

は、2つの異なる条件(例:ユーザー権限、グローバル権限)に基づいて可視性を求めたいとします。今では、子として2つの他のマッチャーで可視性にマッチャーを追加しています。ルートマッチャーのComparisionOperatorはANDで、両方の子マッチャーが真の場合はVisible、そうでない場合は崩壊します。子のValue1は、モデルのPropertyにバインドされます。したがって、マッチャーの組み合わせは常に異なっています – kusi581

+0

テキストボックスのリソースに配置することはできますが、何か他のものを探しているようです – erikH

関連する問題