2012-08-27 101 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應該讓你指出正確的方向。 –