如何在组合框中的数据触发器中获取项目源的值?

How to get the value of the item source in datatrigger in a combobox?

我有一个组合框,其中 itemsource 是 MyTpye 类型的集合。我的类型是这样的:

Class MyClass
{
    long ID;
    string Description;
    decimal Value;
}

对于 DisplayMemberPath,我使用值 属性。问题是它是小数,而不是小数?所以在 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 属性.

谢谢。

在您的 DataTrigger 绑定路径中使用 SelectedItem.ID

<DataTrigger Binding="{Binding Path=SelectedItem.ID}" Value="0">

或者,您可以将另一个 属性 添加到 decimal? 类型的 MyClass 并将其用于 DisplayMemberPath。

public decimal? DisplayValue { get => ID == 0 ? default(decimal?) : Value; }

摆脱 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”。