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>

现在我想使用一个 dataTrigger,它的值可以是 3、301、302 或 303。我该怎么做。我尝试使用 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 不起作用的原因。

要么有四个单独的触发器,要么将条件放入单独的布尔属性中,例如

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 回答