首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TextBlock绑定

TextBlock绑定
EN

Stack Overflow用户
提问于 2012-08-28 00:28:15
回答 2查看 3.6K关注 0票数 1

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

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

我怎样才能实现这个行为呢?我可以使用MultiBinding转换器吗?如果是,请帮我拿一个样本。

代码如下:

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-28 03:13:42

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

首先,定义值转换器:

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

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

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

Stack Overflow用户

发布于 2012-08-28 00:36:32

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

您需要做的是将集合本身绑定到ConverterParameter属性。现在,当命中转换器时,您可以检查集合的计数。如果它小于10,你可以让这个值通过,如果不是,只需要格式化这个值并添加你想要的前导零。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12145859

复制
相关文章

相似问题

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