1

我有一个 TextBlock,它绑定到我的模型的 Integer 属性。TextBlock int 属性将其计数从 0 增加到 99。我首先在 ListView 中显示 TextBlocks 0-9。

如果有超过 10 个 TextBlocks,我希望前 10 个 TextBlocks 编号为 0-9 显示为 00, 01, 02.. 09。我可以使用string.FormatWPF 中的方法来实现此行为。但如果文本块少于 10 个,则应将它们编号为 0、1、2 -- 9。

我怎样才能实现这种行为?我可以使用 MultiBinding 转换器吗?如果是,请帮我提供样品。

这是代码:

<ListView ItemsSource= "{Binding}"> <!-- Binding to a collection which has the Tag Id property -->
  <Grid x:Name="TagNum_grid" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="1,3,0,0" Grid.Column="1" >
    <TextBlock x:Name="DefaultIDtextblock" Margin="1,0" Text="{Binding Path=TagID}" TextWrapping="Wrap" Foreground="#FFA0A0A0" />
  </Grid>
</ListView>
4

2 回答 2

1

正如您所提到的,您可以使用MultiBinding,其中第一个值是标签 id,第二个是元素的数量。

首先,定义值转换器:

public class MyConverter : MarkupExtension, IMultiValueConverter
{
    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return this;
    }

    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        int tagId = (int)values[0];
        int itemCount = (int)values[1];

        if (itemCount >= 10 && tagId < 10)
        {
            return "0" + tagId;
        }

        return tagId;
    }
}

然后绑定值,使用上面的转换器

<ListView ItemsSource="{Binding}">
    <Grid x:Name="TagNum_grid" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="1,3,0,0" Grid.Column="1" >
        <TextBlock x:Name="DefaultIDtextblock" Margin="1,0" TextWrapping="Wrap" Foreground="#FFA0A0A0" >
            <TextBlock.Text>
                <MultiBinding Converter="{local:MyConverter}">
                    <Binding Path="TagID" />
                    <Binding Path="Items.Count" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=ListView}" />
                </MultiBinding>
            </TextBlock.Text>
        </TextBlock>
    </Grid>
</ListView>
于 2012-08-27T19:13:42.037 回答
0

您不需要 MultiValueConverter,一个简单的转换器就足够了。

您需要做的是将集合本身​​绑定到 ConverterParameter 属性。现在当转换器被击中时,您可以检查集合的计数。如果小于 10,您可以让该值通过,否则,只需格式化该值并根据需要添加前导零。

于 2012-08-27T16:36:32.237 回答