2016-06-28 6 views
1

Bisher habe ich eine ObservableCollection<T> für Objekte. Ich möchte immer das zuletzt eingefügte Element in eine TextBlock anzeigen. Ich implementierte zwei Lösungen in XAML, aber beide nicht funktioniert:Bindung an das letzte Array-Element

<TextBlock Text="{Binding Path=entries.Last().message, FallbackValue=...}" /> 

<TextBlock Text="{Binding Path=entries[entries.Length-1].message, FallbackValue=...}" /> 

Dieses funktioniert, sondern verweist auf den ersten Eintrag:

<TextBlock Text="{Binding Path=entries[0].message, FallbackValue=...}" /> 

bin ich etwas fehlt? Ist es möglich mit reinem XAML zu arbeiten?

+0

Nicht, dass ich weiß, von. Mögliche Optionen sind die Verwendung eines Konverters oder einer Eigenschaft in Ihrem Ansichtsmodell, die das letzte Element zurückgibt. –

Antwort

3

Lösung 1:

können Sie einen benutzerdefinierten Konverter verwenden diese zu erreichen:

Converter Klasse:

class LastItemConverter : IValueConverter 
{ 
    public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     IEnumerable<object> items = value as IEnumerable<object>; 
     if (items != null) 
     { 
      return items.LastOrDefault(); 
     } 
     else return Binding.DoNothing; 
    } 

    public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new System.NotImplementedException(); 
    } 
} 

XAML:

<Application.Resources> 
     <local:LastItemConverter x:Key="LastItemConverter" /> 
</Application.Resources> 

<TextBlock Text="{Binding Path=entries, Converter={StaticResource LastItemConverter}}" /> 

Lösung 2:

Der andere Weg ist eine neue Eigenschaft in Ihrem Modell zu erstellen, die den Eintrag zurückgibt:

public Object LastEntry => entries.LastOrDefault(); 

XAML:

<TextBlock Text="{Binding Path=LastEntry, ... " /> 
+0

Im Falle der Eigenschaft würde man Änderungsbenachrichtigungen für besagte Eigenschaft im Falle von 'CollectionChanged' absetzen wollen. –