制作对象后从列表框中获取XML文件URL?

时间:2010-12-05 23:03:55

标签: c# wpf xml

我在列表框中添加了一个名为fixture的对象。我查看所有XML文件的目录和子目录。然后我得到文件的名称,并将它们全部列入清单。

public void CreateLibrary()
{
        List<string> fixtureList = new List<String>();
        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);


            lbxLibrary.Items.Add(fixture);
        }

我希望能够从列表框中当前选定的项目中获取文件网址。我知道我可能需要改变我导入文件的方式,这很好,但我在一些建议和一些文档后阅读。

提前干杯:)

迈克尔。

1 个答案:

答案 0 :(得分:0)

我建议您创建一个名为XmlFileInfo的类,而不是直接向ListBox添加字符串,您可以在其中存储每个已加载的xml文件的信息。

public class XmlFileInfo
{
    public XmlFileInfo(string fixture, string path)
    {
        Fixture = fixture;
        Path = path;
    }
    public string Fixture { get; set; }
    public string Path { get; set; }
}

然后使用XmlFileInfo创建一个ObservableCollection并将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,您可以轻松找到所选项目的网址

private void lbxLibrary_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    XmlFileInfo xmlFileInfo = lbxLibrary.SelectedItem as XmlFileInfo;
    string path = xmlFileInfo.Path;
    // ...
}

<强>更新

上传的示例项目here