2016-03-21 1 views
0

Использование wpf ListBox Я пытаюсь отобразить список имен файлов, не отображая полный путь (более удобный для пользователя).Путь к файлу имен Редактор строк не работает

Данные взяты из ObservableCollection, которые заполняются с помощью диалогового окна.

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

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

В конце концов, я хочу выбрать некоторые элементы и вернуть полный путь к файлу. Для этого у меня есть конвертер:

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; 
     } 
    } 

Что я связываю с моей ListBox ItemSource:

<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}"> 

без преобразователя, он работает нормально (но, конечно, это полный путь отображается в окне списка). С преобразователем у меня есть один символ в строке ..., отображающий это:

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

Где я ошибаюсь?

Спасибо

ответ

3

В ItemsSource связывания преобразователя относится ко всему списку и не к каждому элементу коллекции. Если вы хотите применить конвертер для каждого элемента, вам необходимо это сделать 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

Именно так. спасибо – lecloneur