我有一个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>
答案 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,你可以让值传递,如果没有,只需格式化值并按你希望添加前导零。