我有一个组合框,其中itemsource是MyTpye类型的集合。我的类型是这样的:
Class MyClass
{
long ID;
string Description;
decimal Value;
}
对于DisplayMemberPath,我正在使用Value属性。问题是那是十进制,而不是十进制?,因此,在ID为0的情况下,该值也为0。我想在这种情况下显示0。
所以我正试图以这种方式使用数据触发:
<ComboBox Name="myComboBox"
DisplayMemberPath="Value"
ItemsSource="{Biniding MyCollection}"
SelectedItem="{Binding Path=MySelectedItem}">
<ComboBox.Style>
<Style TargetType="ComboBox">
<Style.Triggers>
<DataTrigger Binding="{Binding ???, path=ID}" Value="0">
<Setter Property="DisplayMemberPath" Value="{x:Null}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>
问题在于,在数据触发器的绑定中,我不知道如何获取集合项(即组合框项的源)以及该项的ID属性。
谢谢。
答案 0 :(得分:1)
在您的SelectedItem.ID
绑定路径中使用DataTrigger
。
<DataTrigger Binding="{Binding Path=SelectedItem.ID}" Value="0">
或者,您也可以向MyClass
类型的decimal?
添加另一个属性,并将其用于DisplayMemberPath。
public decimal? DisplayValue { get => ID == 0 ? default(decimal?) : Value; }
答案 1 :(得分:1)
摆脱DisplayMemberPath
并使用ItemTemplate
来显示Value
属性的值或其他内容:
<ComboBox Name="myComboBox"
ItemsSource="{Binding MyCollection}"
SelectedItem="{Binding Path=MySelectedItem}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="{Binding Value}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Value}" Value="0">
<Setter Property="Text" Value="..." />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
在上面的示例中,对于Value
为0
的任何项目,将显示“ ...”而不是“ 0”。