Открытие файла из ListView для события MouseDoubleClick - PullRequest
0 голосов
/ 28 марта 2012

Я пытаюсь создать Windows Explorer. Мне удалось заполнить treeView и listView как проводник Windows, но у меня возникла проблема с открытием файла при двойном щелчке из listView.

Вот что у меня есть:

try
        {
            //clears the collection so the listview has only the files of the folder thats clicked on
            _fileDetails.Clear();


            DirectoryInfo dirInfo = new DirectoryInfo( SelectedImagePath );
            FileInfo[] info = dirInfo.GetFiles();

            foreach (FileInfo fileInfo in info)
            {
                //adds files to the collection with its properties
                _fileDetails.Add( new Details
                {
                    FileName = fileInfo.Name,
                    Size = fileInfo.Length.ToString(),
                    DateCreated = fileInfo.CreationTime.ToString(),
                    DateModified = fileInfo.LastWriteTime.ToString(),
                    RevNumber = "?",
                    User = "?"
                } );

            }
        }

где fileDetails - моя коллекция ObservableCollection.

Событие мыши:

protected void HandleDoubleClick( object sender, MouseButtonEventArgs e )
    {
        DependencyObject src = ( DependencyObject )( e.OriginalSource );
        while (!( src is Control ))
            src = VisualTreeHelper.GetParent( src );
        MessageBox.Show( "*** Double clicked on a " + src.GetType().FullName +"********************" + sender.ToString() );
    }

Переплет:

<ListView Height="335" HorizontalAlignment="Right" Margin="0,12,12,0" Name="fileExplorerView" VerticalAlignment="Top" Width="509" Grid.Column="1" ItemsSource="{Binding ElementName=This, Path=fileDetails}">
        <ListView.ItemContainerStyle>
            <Style TargetType="{x:Type ListViewItem}">
                <EventSetter Event="MouseDoubleClick" Handler="HandleDoubleClick"/>
            </Style>
        </ListView.ItemContainerStyle>
        <ListView.View>

            <GridView>
                <GridViewColumn Header="Name" Width="100" DisplayMemberBinding="{Binding FileName}"/>
                <GridViewColumn Header="Size" Width="100" DisplayMemberBinding="{Binding Size}"/>
                <GridViewColumn Header="Date Created" Width="100" DisplayMemberBinding="{Binding DateCreated}"/>
                <GridViewColumn Header="Time Created" Width="100" DisplayMemberBinding="{Binding DateModified}"/>
                <GridViewColumn Header="Revision Number"  Width="100" DisplayMemberBinding="{Binding RevNumber}"/>
                <GridViewColumn Header="Modified By" Width="100" DisplayMemberBinding="{Binding User}"/>

            </GridView>

        </ListView.View>
    </ListView>

Вместо messageBox в событии мыши я буду использовать процесс для открытия файлов. Проблема в том, что я не могу понять, как получить путь к выбранному файлу.

Спасибо

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 28 марта 2012

Что-то вроде

var item = (FrameworkElement)sender;
var file = (Details)item.DataContext;
var path = file.Path; // Your Details class should save the FileInfo.FullName!

(Почему у вас в любом случае класс Details? Я бы просто использовал объект FileInfo)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...