【问题标题】:How to get the value of the item source in datatrigger in a combobox?如何在组合框中的datatrigger中获取项目源的值?
【发布时间】:2018-12-22 20:45:00
【问题描述】:

我有一个组合框,其中 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的绑定中,我不知道如何获取collection的item,即combobox的item的sorce,以及从这个item的ID属性。

谢谢。

【问题讨论】:

    标签: c# wpf datatrigger


    【解决方案1】:

    DataTrigger 绑定路径中使用SelectedItem.ID

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2017-04-28
        • 1970-01-01
        • 2010-10-20
        • 2017-01-14
        • 1970-01-01
        • 2020-06-28
        • 2019-10-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多