2016-03-21 5 views
0

Mit einem wpf ListBox Ich versuche, eine Liste von Dateinamen anzuzeigen, ohne den vollständigen Pfad anzuzeigen (bequemer für Benutzer).Dateipfad zum Dateinamen Stringkonverter funktioniert nicht

Die Daten stammen von einem ObservableCollection, der mit Dialog gefüllt wird.

private ObservableCollection<string> _VidFileDisplay = new ObservableCollection<string>(new[] {""}); 

    public ObservableCollection<string> VidFileDisplay 
    { 
     get { return _VidFileDisplay; } 
     set { _VidFileDisplay = value; } 
    } 

Am Ende möchte ich einige Elemente auswählen und den vollständigen Dateipfad zurück erhalten. Dazu habe ich einen Konverter:

public class PathToFilenameConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      //return Path.GetFileName(value.ToString()); 
      string result = null; 
      if (value != null) 
      { 
       var path = value.ToString(); 

       if (string.IsNullOrWhiteSpace(path) == false) 
        result = Path.GetFileName(path); 
      } 
      return result; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      return value; 
     } 
    } 

Was ich an meine listbox ItemSource binden:

<ListBox x:Name="VideoFileList" Margin="0" Grid.Row="1" Grid.RowSpan="5" Template="{DynamicResource BaseListBoxControlStyle}" ItemContainerStyle="{DynamicResource BaseListBoxItemStyle}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ItemsSource="{Binding Path=DataContext.VidFileDisplay, Converter={StaticResource PathToFileName},ElementName=Ch_Parameters, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding Path=SelectedVidNames,ElementName=Ch_Parameters, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> 

Ohne den Konverter, es funktioniert gut (aber natürlich ist der vollständige Pfad in der Listbox angezeigt). Mit dem Konverter habe ich ein Zeichen pro Zeile ... Anzeige:

System.Collections.ObjectModel.ObservableCollection`1[System.String] 

Wo liege ich falsch?

Danke

Antwort

3

In ItemsSource Bindung Konverter auf die gesamte Liste gilt und nicht in der Sammlung jedes Element. Wenn Sie Ihren Konverter pro Artikel anwenden möchten, müssen Sie es tun ItemTemplate

<ListBox x:Name="VideoFileList" ItemsSource="{Binding Path=DataContext.VidFileDisplay, ElementName=Ch_Parameters}" ...> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Path=., Converter={StaticResource PathToFileName}}"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

das war es. Vielen Dank – lecloneur

Verwandte Themen