【问题标题】:TextBlock Binding文本块绑定
【发布时间】:2012-08-27 16:28:15
【问题描述】:

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

如果有超过 10 个 TextBlock,我希望前 10 个编号为 0-9 的 TextBlock 显示为 00, 01 , 02.. 09。我可以使用 WPF 中的string.Format 方法来实现此行为。但如果文本块少于 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>

【问题讨论】:

    标签: c# wpf data-binding binding


    【解决方案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>
    

    【讨论】:

    • 效果很好...非常感谢阿迪!!!我在这里为检查转换器做了一个小改动 if (itemCount > 10 && tagId
    【解决方案2】:

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

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

    【讨论】:

    猜你喜欢
    • 2015-01-29
    • 2018-10-15
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多