Вместо того, чтобы добавлять строки непосредственно в ListBox, я бы предложил вам создать класс с именем что-то вроде XmlFileInfo, в котором вы будете хранить информацию для каждого из ваших загруженных XML-файлов.
public class XmlFileInfo
{
public XmlFileInfo(string fixture, string path)
{
Fixture = fixture;
Path = path;
}
public string Fixture { get; set; }
public string Path { get; set; }
}
Затем создайте ObservableCollection с XmlFileInfo ипривяжите свой ListBox к этой коллекции следующим образом
<ListBox Name="lbxLibrary"
ItemsSource="{Binding XmlFileInfoCollection}"
DisplayMemberPath="Fixture"
SelectionChanged="lbxLibrary_SelectionChanged"/>
Пример того, как может выглядеть код позади
public MainWindow()
{
InitializeComponent();
XmlFileInfoCollection = new ObservableCollection<XmlFileInfo>();
this.DataContext = this;
}
public ObservableCollection<XmlFileInfo> XmlFileInfoCollection
{
get;
private set;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
CreateLibrary();
}
public void CreateLibrary()
{
string[] dirs = Directory.GetFiles(@"C:\Windows.old\Users\Michael\Desktop\data\fixtures\", "*.xml",
SearchOption.AllDirectories);
foreach (string dir in dirs)
{
string fixture = System.IO.Path.GetFileName(dir);
XmlFileInfo xmlFileInfo = new XmlFileInfo(fixture, dir);
XmlFileInfoCollection.Add(xmlFileInfo);
}
}
И в некоторых случаях, скажем, SelectionChanged, вы можете легко найти URL для выбранногоэлемент вроде этого
private void lbxLibrary_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
XmlFileInfo xmlFileInfo = lbxLibrary.SelectedItem as XmlFileInfo;
string path = xmlFileInfo.Path;
// ...
}
Обновление
Загруженный пример проекта здесь