1

モデルの Integer プロパティにバインドされた TextBlock があります。TextBlock int プロパティは、そのカウントを 0 から 99 に増やします。まず、TextBlocks 0 ~ 9 を ListView に表示します。

10 個を超える TextBlocks がある場合、0 ~ 9 の番号が付けられた最初の 10 個の TextBlocks が 00、01、02.. 09 として表示されるようにします。WPF でstring.Formatメソッドを使用して、この動作を実現できます。ただし、TextBlock が 10 個未満の場合は、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>
4

2 に答える 2

1

前述のように、を使用できますMultiBinding。最初の値はタグIDで、2番目の値は要素の数です。

まず、値コンバーターを定義します。

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-27T19:13:42.037 に答える
0

MultiValueConverter は必要ありません。単純なコンバーターで十分です。

必要なことは、コレクション自体を ConverterParameter プロパティにバインドすることです。コンバーターがヒットすると、コレクションの数を確認できるようになりました。10 未満の場合は、値を通過させます。そうでない場合は、値をフォーマットし、必要に応じて先行ゼロを追加します。

于 2012-08-27T16:36:32.237 に答える