TextBlock绑定

时间:2012-08-27 16:28:15

标签: c# wpf data-binding binding

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

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

我该如何实现这种行为?我可以使用MultiBinding Converter吗?如果是,请帮我一个样本。

以下是代码:

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

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

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

您需要做的是将集合本身​​绑定到ConverterParameter属性。 现在,当转换器被击中时,您可以检查集合的计数。 如果它低于10,你可以让值传递,如果没有,只需格式化值并按你希望添加前导零。