2010-12-28 12 views
3

Ich habe ein ItemsControl. Für das letzte Element in ItemsControl möchte ich die TextBox ausblenden, die das Komma enthält. Gibt es eine Möglichkeit, dies mit XAML zu tun?Silverlight: Letzter Artikel in einem 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> 

Antwort

4

Wie wäre es

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

mit Ihrer Ansicht nach Modell etwas wie

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

?

+0

Nun muss Ihr ViewModel auf Ereignisse in der Sammlung, die es enthält ändern. Dies ist nicht das Ende der Welt, aber es wird unordentlich. –

+1

@ Jonathan Allen Ja das stimmt, aber ein wenig Code ist normal für die meisten View-Modelle. ;-) ... Es ist vielleicht schade, dass es für dieses ganz normale Szenario keine Lösung gibt. Wenn es in Ihrem Beispiel nur Text gibt, würde ich wahrscheinlich einen einfachen 'TextBlock' und einen' ValueConverter' verwenden, der anstelle eines ItemsControls ein 'String.Join (...)' ausführt. – herzmeister

+0

Im wirklichen Leben habe ich einige funky Formatierungsprobleme, um durchzuarbeiten. Sonst hätte ich es nur zu einer schreibgeschützten Eigenschaft für das Modell oder View-Modell gemacht. –

1

Es ist ärgerlich, es ist nicht einfacher, dies mit einem Konverter zu lösen. In der Tat, wenn Sie an den ConverterParameter binden könnten (was in Silverlight v4 nicht möglich ist), könnten Sie ganz leicht erreichen, was Sie wollen.

Wenn Sie Ihr Modell nicht anfassen möchten, sollten Sie eine neue, von ControlControl abgeleitete Klasse erstellen, die basierend auf der Position eines gebundenen Elements in der Objektquelle eine eigene Sichtbarkeit festlegt. Es ist nicht die sauberste Lösung der Welt, aber es hält das Modell sauber. Es würde so aussehen in der ItemsControl

+0

Das ist sicherlich eine interessante Idee. Ich habe die Elternkollektion neu geschrieben, aber wenn ich es nicht getan hätte, würde ich das definitiv versuchen. –

Verwandte Themen