WPF文件资源管理器 - 获取文件目录/路径

时间:2014-06-05 07:00:16

标签: c# .net wpf file xaml

昨天我问了一个关于WPF简单文件资源管理器的问题:File explorer - UnauthorizedAccessException

文件资源管理器工作正常,但现在我需要所选文件中的文件名和文件路径。

这是我的xaml:

<TreeView Grid.Column="0" Width="Auto" Height="Auto" HorizontalAlignment="Stretch" Name="feDirectory" SelectedItemChanged="feDirectorySelectedItemChanged" />
<ListBox Grid.Column="1" Width="Auto" Height="Auto" HorizontalAlignment="Stretch" Name="fExpl" VerticalAlignment="Stretch" MouseDoubleClick="fExplMouseDoubleClick"/>

我可以获得文件名:

private void fExplMouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    string fileName = fExpl.SelectedItem.ToString();
}

但是,如果我尝试获取文件路径 - 它不起作用。我认为问题是,文件路径不会显示在ListBox中,而是显示在TreeView中。有人有想法吗?我应该发布整个C#代码还是链接昨天的问题好吗?

编辑:为什么我需要它?因为我想通过ProcessStartInfo和Process

从文件资源管理器中打开文件

2 个答案:

答案 0 :(得分:3)

这里没有一个简单的答案。您已经选择了一些具有单一目的的示例代码,而您现在正试图将其超越此目的,因此现在需要重新设计。

如果您阅读了很多关于WPF应用程序的内容,您会遇到名为MVVM或Model-View-ViewModel的模式。这样做的想法是你有一些原始数据 - 模型,一个帮助你在UI中处理它的adpater - ViewModel,然后是一个显示它的UI元素 - 视图。使用这种模式是因为虽然它起初看起来很复杂,但它使得应用程序变得更加简单,因为它们变得更加复杂。

您拥有的代码使用的是更为旧的winforms模式的继承视图。这通过继承(ListViewItem)来扩展UI元素(MyListViewItem),但不幸的是,您的代码示例并未包含其定义。

因此,您可以重新设计您的应用程序以使用MVVM,这样做可以解决将来会出现的许多问题,或者您可以简单地扩展MyListViewItem以包含额外的属性Path但这只会让你解决这个问题并进入下一个问题。

答案 1 :(得分:0)

查看其他问题中发布的代码,我看到您用以下内容填充ListBox:

foreach (FileInfo FL in DIR.GetFiles())
{
    ltbExplorer.Items.Add(FL.Name);
}

您可以在ListBox中添加除String之外的其他对象,您可以直接添加FileInfo,如下所示:

foreach (FileInfo FL in DIR.GetFiles())
{
    this.fExpl.Items.Add(FL);
}

在WPF中,当显示对象msut时,会自动调用ToString()方法。因此,您的列表框将填好

然后,要获取目录,可以直接使用FileInfo对象:

private void fExpl_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    String dir = (fExpl.SelectedItem as FileInfo).DirectoryName;
    // assuming you want to put the directory in a texbox
    this.directory.Text = dir;
}

这就是全部;)