如何在组合框的datatrigger中获取商品来源的价值?

时间:2018-07-14 19:04:57

标签: c# wpf datatrigger

我有一个组合框,其中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属性。

谢谢。

2 个答案:

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

在上面的示例中,对于Value0的任何项目,将显示“ ...”而不是“ 0”。

相关问题