我有以下 XML:
<Items>
<Item>
<Name>Item One</Name>
<MyValue>42</MyValue>
</Item>
</Items>
和 XAML:
<DockPanel>
<DockPanel.Resources>
<XmlDataProvider x:Key="ItemsXml" XPath="Items/Item"
Source="Resources/Items.xml"/>
</DockPanel.Resources>
<ListBox
ItemsSource="{Binding Source={StaticResource ItemsXml}}"
DisplayMemberPath="Name" Name="itemList"/>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.Resources>
<Style x:Key="ValueFormat" TargetType="Label">
<Setter Property="ContentStringFormat" Value="{}/{0,3}"/>
</Style>
</Grid.Resources>
<Image Source="Icons/ConditionFalse.png" Grid.Column="0"/>
<TextBox Name="myTextBox" VerticalAlignment="Center" Grid.Column="1"/>
<Label
Name="myLabel"
DataContext="{Binding SelectedItem, ElementName=itemList}"
Style="{StaticResource ValueFormat}"
VerticalAlignment="Center"
Content="{Binding XPath=MyValue}"
Grid.Column="2"/>
</Grid>
</DockPanel>
我想使Image.Source
取决于TextBox.Text
等于Label
* 的参考值的条件。参考值是对 XML 文件的绑定,因此使用它作为比较的基础也是可以的。将TextBox
绑定到一个尚不存在的属性,因此可以作为一个选项使用。
*Label
当前用于ContentStringFormat
更改其值。如果这是有问题的,它可以被摆脱。
我可以使用aDataTrigger
直接绑定到表示此条件的属性,但这感觉像是一种 hack,我宁愿避免这种情况。我尝试设置 a MultiDataTrigger
,如下所示,但首先我无法使条件适用于Label
(它确实适用于TextBox
),其次,在我的情况下,恒定值不好。当条件评估为 false 时,它也没有“else”子句或默认值,但如果可以首先进行检查,我希望这不会成为问题。
<Image Grid.Column="0">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Value="/ 42"
Binding="{Binding Text, ElementName=myTextBox}"/>
<Condition Value="/ 42"
Binding="{Binding Content, ElementName=myLabel}"/>
</MultiDataTrigger.Conditions>
<Setter Property="Source" Value="Icons/ConditionTrue.png"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>