6

私はXAMLコードの一部を使用しています

<DataTrigger Binding="{Binding Path=Name}" Value="1">
    <Setter Property="Header" TargetName="expanderHeader" Value="Course Text"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=Name}" Value="2">
    <Setter Property="Header" TargetName="expanderHeader" Value="Media Lecture"/>
</DataTrigger>
<DataTrigger    Binding="{Binding Path=Name}" Value="3">
    <Setter Property="Header" TargetName="expanderHeader" Value="Assessment"/>

<DataTrigger Binding="{Binding Path=Name}" Value="4">
    <Setter Property="Header" TargetName="expanderHeader" Value="Question"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=Name}" Value="5">
    <Setter Property="Header" TargetName="expanderHeader" Value="General"/>
</DataTrigger>

ここで、3、301、302、または 303 の値を持つことができる dataTrigger を使用したいと考えています。これを行うにはどうすればよいですか。Multidatatrigger で試しましたが、うまくいきません。Multidatatrigger で試したコードは次のとおりです。

<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding Path=Name}" Value="301"/>
        <Condition Binding="{Binding Path=Name}" Value="301"/>
        <Condition Binding="{Binding Path=Name}" Value="302"/>
        <Condition Binding="{Binding Path=Name}" Value="303"/>
        </MultiDataTrigger.Conditions>
    <Setter Property="Header" TargetName="expanderHeader" Value="Assessment"/>
</MultiDataTrigger>
4

2 に答える 2

10

MultiDataTrigger は、すべての条件が満たされていない場合に適用されます。そのため、MultiDataTrigger は機能していません。

4 つの個別のトリガーを用意するか、条件を次のような個別のブール値プロパティに入れます。

bool ShowAssessment
{
    return Value == 301 || Value == 302 ...
}

値が変更されたときに ShowAssessment のプロパティ変更通知を発生させる

例えば

int Value { 
    get{ return _value; } 
    set { 
        _value = value; 
        RaisePropertyChanged("Value");
        RaisePropertyChanged("ShowAssessment");
    }
}

そして、ShowAssessment でトリガーします。

おそらくより良い解決策は、 に基づいて正しいヘッダー テキストを返す switch ステートメントを含む HeaderText プロパティを追加することValueです。次に、ヘッダーのテキストをそれにバインドします。トリガーは必要ありません。

于 2012-04-18T10:23:46.387 に答える
0

MultidataTriggerは、すべての条件が満たされたときに動作します。それで

<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding Path=Prop1}" Value="301"/>
        <Condition Binding="{Binding Path=Prop2}" Value="301"/>
        <Condition Binding="{Binding Path=Prop3}" Value="302"/>
        <Condition Binding="{Binding Path=Prop4}" Value="303"/>
    </MultiDataTrigger.Conditions>
    <Setter Property="Header" TargetName="expanderHeader" Value="Assessment"/>
</MultiDataTrigger>

単一のDataTriggerが必要になります

<DataTrigger Binding="{Binding Path=ConditionEnum}" Value="1">
    <Setter Property="Header" TargetName="expanderHeader" Value="Course Text"/>
</DataTrigger>

コードで定義されたロジックを使用して列挙型の値を設定します...

例 :

Validate()
{
    if(Value == 301 || Value == 302|| ....)
    {
        ConditionEnum = MyEnum.Assessment;
    }
    //Other Conditions
}

の実装を残しINotifyPropertyChangedます。変更通知を提供するために使用します。

于 2012-04-18T10:29:09.317 に答える