【问题标题】:WPF Listview - Change format of a row depending on contentWPF Listview - 根据内容更改行的格式
【发布时间】:2019-06-06 10:33:18
【问题描述】:

我有一个包含 3 列的 WPF 列表视图。名称、成本和销售。 Cost 和 Sell 是格式化为货币的可编辑文本框。

2 个问题: - 我可能列出了需要将成本和销售额格式化为百分比而不是货币的特定项目。所以如果 Name="x" 那么成本和销售应该有百分比字符串格式。

  • 有些物品只需要一个出售选项。因此,如果 Name="y",则不要在 Cost 列中显示文本框。

我将如何在 WPF 中实现这一点?我正在研究 DataTriggers 但无法弄清楚如何正确实施。

<ListView x:Name="Pricing_LV" HorizontalAlignment="Left" Height="335" Margin="10,41,0,0" VerticalAlignment="Top" Width="350" TabIndex="22">
    <ListView.View>
        <GridView>

            <GridViewColumn Header="Surcharge" Width="185" DisplayMemberBinding="{Binding Path=Name}"/>

            <GridViewColumn Header="Cost" Width="70">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox Width="55" Text="{Binding Path=Cost, StringFormat='c'}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>

            <GridViewColumn Header="Sell" Width="70">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox Width="55" Text="{Binding Path=Sell, StringFormat='c'}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

【问题讨论】:

    标签: wpf


    【解决方案1】:

    您可能尝试将您的 DataTriggers 直接放在 TextBox.Triggers 中,但随后出现以下错误

    错误:触发器集合成员必须是 EventTrigger 类型

    另见question

    解决方案是简单地将您的 Triggers 包裹在 Style

    <ListView x:Name="Pricing_LV" HorizontalAlignment="Left" Height="335" Margin="10,41,0,0" VerticalAlignment="Top" Width="350" TabIndex="22">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Surcharge" Width="185" DisplayMemberBinding="{Binding Path=Name}"/>
                <GridViewColumn Header="Cost" Width="70">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox Width="55">
                                <TextBox.Style>
                                    <Style TargetType="TextBox">
                                        <Setter Property="Text" Value="{Binding Path=Cost, StringFormat='c'}"></Setter>
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding Name}" Value="x">
                                                <Setter Property="Text" Value="{Binding Path=Cost, StringFormat=#.00\\%}"></Setter>
                                            </DataTrigger>
                                            <DataTrigger Binding="{Binding Name}" Value="y">
                                                <Setter Property="Text" Value=""></Setter>
                                                <Setter Property="Visibility" Value="Hidden"></Setter>
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </TextBox.Style>
                            </TextBox>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="Sell" Width="70">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox Width="55">
                                <TextBox.Style>
                                    <Style TargetType="TextBox">
                                        <Setter Property="Text" Value="{Binding Path=Sell, StringFormat='c'}"></Setter>
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding Name}" Value="x">
                                                <Setter Property="Text" Value="{Binding Path=Sell, StringFormat=#.00\\%}"></Setter>
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </TextBox.Style>
                            </TextBox>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>
    

    注意:我不使用p 作为百分比格式,因为我认为这不适合您的情况。另见here

    【讨论】:

    • 谢谢!那行得通!你是对的,我错过了 Style 标签。
    猜你喜欢
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    相关资源
    最近更新 更多