昨天我问了一个关于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
从文件资源管理器中打开文件答案 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;
}
这就是全部;)