代码之家  ›  专栏  ›  技术社区  ›  Álvaro García

如何在组合框的datatrigger中获取项源的值?

  •  0
  • Álvaro García  · 技术社区  · 6 年前

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

    问题是,在datatrigger的绑定中,我不知道如何获取集合中的项,即组合框项的排序,以及从该项获取id属性。

    谢谢。

    2 回复  |  直到 6 年前
        1
  •  1
  •   mm8    6 年前

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

    在上面的示例中,对于任何带有 价值 属于 0 是的。

        2
  •  1
  •   Roger Leblanc    6 年前

    使用 SelectedItem.ID 在你的 DataTrigger 绑定路径。

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

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

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