2012-08-27 183 views
1

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

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

回答

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

伟大的作品...非常感谢阿迪!如果(itemCount> 10 && tagId <10),我在这里为转换器中的检查做了一个小改动。 – Jack

0

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

你需要做的是将集合本身​​绑定到ConverterParameter属性。 现在,当转换器被击中时,您可以检查收集的数量。 如果它在10以下,你可以让这个值通过,如果没有的话,只要格式化这个值并根据你的意愿添加前导零。

+0

我会给这是一个尝试,让你知道!谢谢 – Jack

+2

[ConverterParameter](http://msdn.microsoft.com/en-us/library/system.windows.data.binding.converterparameter)不是一个依赖项属性,因此可以不绑定。 – Clemens

+0

http://stackoverflow.com/questions/4010772/binding-stringformat应该让你指出正确的方向。 –