我有一个绑定到我的模型的整型属性的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转换器吗?如果是,请帮我拿一个样本。
代码如下:
<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>发布于 2012-08-28 03:13:42
正如您所提到的,您可以使用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-28 00:36:32
你不需要MultiValueConverter,一个简单的转换器就足够了。
您需要做的是将集合本身绑定到ConverterParameter属性。现在,当命中转换器时,您可以检查集合的计数。如果它小于10,你可以让这个值通过,如果不是,只需要格式化这个值并添加你想要的前导零。
https://stackoverflow.com/questions/12145859
复制相似问题