首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在组合框中获取datatrigger中的项源的值?

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

Stack Overflow用户
提问于 2018-07-15 03:04:57
回答 2查看 720关注 0票数 0

我有一个组合框,它的项来源是MyTpye类型的集合。我的类型是这样的:

代码语言:javascript
复制
Class MyClass
{
    long ID;
    string Description;
    decimal Value;
}

对于DisplayMemberPath,我使用了Value属性。问题是它是一个小数,而不是小数?,所以在ID是0的情况下,值也是0。在这种情况下,我想显示0。

所以我尝试以这种方式使用数据触发器:

代码语言:javascript
复制
<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>

问题是,在数据触发器的绑定中,我不知道如何获取集合中的项,即组合框中项的sorce,以及从该项中获取ID属性。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-16 18:17:12

去掉DisplayMemberPath,使用ItemTemplate显示Value属性的值或其他值:

代码语言:javascript
复制
<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“而不是”0“。

票数 1
EN

Stack Overflow用户

发布于 2018-07-15 11:36:33

DataTrigger绑定路径中使用SelectedItem.ID

代码语言:javascript
复制
<DataTrigger Binding="{Binding Path=SelectedItem.ID}" Value="0">

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

代码语言:javascript
复制
public decimal? DisplayValue { get => ID == 0 ? default(decimal?) : Value; }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51342567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档