2010-12-28 9 views
3

ItemsControlがあります。 ItemsControlの最後の項目については、コンマを含むTextBoxを非表示にします。 XAMLを使用してこれを行う方法はありますか?Silverlight:ItemsControlの最後のアイテム

 <ItemsControl> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal" Visibility="{Binding Value, Converter={StaticResource NotEmpty}}"> 
         <TextBlock Text="{Binding QuestionName}" /> 
         <TextBlock Text=" " /> 
         <TextBlock Text="{Binding Answer}"/> 
         <TextBlock Text=", " /> 
        </StackPanel> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 

      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <toolkit:WrapPanel Orientation="Horizontal" /> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
     </ItemsControl> 

答えて

4

どの程度

<TextBlock Text=", " Visibility="{Binding LastItemVisibility}" /> 

public Visibility LastItemVisibility 
{ 
    get { return MyCollection.LastOrDefault() == this ? Visibility.Collapsed : Visibility.Visible; } 
} 

のようなもの、あなたのビューモデルのありますか?

+0

これで、ViewModelはそれを含むコレクションのイベントを変更する必要があります。これは世界の終わりではありませんが、面倒です。 –

+1

@Jonathan Allenはい、そうですが、ほとんどのビューモデルでは少しコードが正常です。 ;-) ...これはかなり一般的なシナリオでは解決策がないことは残念です。あなたの例のようなテキストだけがあるなら、私はItemsControlの代わりに 'String.Join(...)'を行う単純な 'TextBlock'と' ValueConverter'を使うでしょう。 – herzmeister

+0

実生活では、うまくいく書式設定の問題があります。それ以外の場合は、モデルまたはビューモデルで読み取り専用のプロパティにするだけです。 –

1

これをコンバータで解決するのは簡単ではありません。実際、Silverlight v4では不可能なConverterParameterにバインドすることができれば、簡単に目的を達成することができます。

モデルに触れたくない場合は、ItemsSource内の結合項目の位置に基づいて独自の可視性を設定するControlControlから派生した新しいクラスを作成することをお勧めします。これは世界で最もきれいな解決策ではありませんが、モデルをきれいに保ちます。 ItemsControlでは次のようになります

<local:ItemsControlVisibilityHelper ShowIfLast="False" ShowIfFirst="True" ShowIfNotLastOrFirst="True" 
                    ItemsControl="{Binding ElementName=x_ItemsControl}" 
                    BoundItem="{Binding}" 
                    > 
            <TextBlock Text=", "></TextBlock> 
           </local:ItemsControlVisibilityHelper> 
+0

これは確かに興味深い考えです。私は親コレクションを書き直しましたが、もし私がいなければ、私は間違いなくこれを試してみるでしょう。 –

関連する問題