Hey liebe Community,
da ich ja in letzter Zeit die Nerven so einiger in Anspruch genommen hab, dachte ich ich geb mal was zurück, und da ich sowieso grad dabei war, hab ich gedacht, ich lade mal meinen File- und FolderPicker hier hoch...
Ist nichts besonderes, aber halt WPF und MVVM, und ich denke es ist ideal, wenn man neu in MVVM ist, das mal als Projekt zum mit rum spielen zu nehmen, da nicht so umfangreich.
Die View sieht so aus (im XAML müsst ihr in den Zeilen 25, 31 und 37 noch ein passenders XAML Icon unter
Spoiler anzeigen
Und das ViewModel:
Spoiler anzeigen
Das Ganze gern erweitern, modifizieren und/oder verwenden (z.B. in einem modalen Dialog anzeigen)
Oder euren Senf dazugeben
Bei Fragen bitte melden.
Edit: Hab noch ein paar Bugfixes gemacht, neuer Download siehe neuester Post.
Und weils so schön war: Bis heute (09.01.2024) wurde das File 63 Mal heruntergeladen :-)
da ich ja in letzter Zeit die Nerven so einiger in Anspruch genommen hab, dachte ich ich geb mal was zurück, und da ich sowieso grad dabei war, hab ich gedacht, ich lade mal meinen File- und FolderPicker hier hoch...
Ist nichts besonderes, aber halt WPF und MVVM, und ich denke es ist ideal, wenn man neu in MVVM ist, das mal als Projekt zum mit rum spielen zu nehmen, da nicht so umfangreich.
Die View sieht so aus (im XAML müsst ihr in den Zeilen 25, 31 und 37 noch ein passenders XAML Icon unter
Data
eintagen; die Buttons funktionieren aber auch so und sind mit Tooltips versehen...; gibts im Internet zu finden...)XML-Quellcode
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="30*"/>
- <ColumnDefinition Width="3"/>
- <ColumnDefinition Width="70*"/>
- </Grid.ColumnDefinitions>
- <Grid.RowDefinitions>
- <RowDefinition Height="15*"/>
- <RowDefinition Height="60*"/>
- <RowDefinition Height="10*"/>
- <RowDefinition Height="15*"/>
- </Grid.RowDefinitions>
- <GridSplitter Grid.Column="1" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Foreground="{DynamicResource VordergrundfarbeBrush}" Width="3" Background="{DynamicResource VordergrundfarbeBrush}" Margin="0, 10, 0, 10"/>
- <Grid Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" Margin="10">
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="85*"/>
- <ColumnDefinition Width="5*"/>
- <ColumnDefinition Width="5*"/>
- <ColumnDefinition Width="5*"/>
- </Grid.ColumnDefinitions>
- <Border Grid.Column="1" Style="{DynamicResource Navigationsbuttons}" ToolTip="Benenne den aktuellen Ordner um...">
- <Border.InputBindings>
- <MouseBinding MouseAction="LeftClick" Command="{Binding Umbenennen}"/>
- </Border.InputBindings>
- <Path Fill="{DynamicResource VordergrundfarbeBrush}" Data=""/>
- </Border>
- <Border Grid.Column="2" Style="{DynamicResource Navigationsbuttons}" ToolTip="Erstelle im aktuellen Ordner einen neuen Ordner...">
- <Border.InputBindings>
- <MouseBinding MouseAction="LeftClick" Command="{Binding NeuenOrdnerErstellen}"/>
- </Border.InputBindings>
- <Path Fill="{DynamicResource VordergrundfarbeBrush}" Data=""/>
- </Border>
- <Border Grid.Column="3" Style="{DynamicResource Navigationsbuttons}" ToolTip="Springe zum übergeordneten Ordner...">
- <Border.InputBindings>
- <MouseBinding MouseAction="LeftClick" Command="{Binding SpringeOrdnerDarueber}"/>
- </Border.InputBindings>
- <Path Fill="{DynamicResource VordergrundfarbeBrush}" Data=""/>
- </Border>
- <Label Grid.Column="0" VerticalAlignment="Center" Background="Transparent" Foreground="{DynamicResource VordergrundfarbeBrush}" Content="{Binding AktuellerOrdner, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
- </Grid>
- <ListBox Grid.Row="1" Grid.Column="0" ItemsSource="{Binding RootVerzeichnisseStrings, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" SelectedIndex="{Binding RootIndex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Background="Transparent" Foreground="{DynamicResource VordergrundfarbeBrush}" Margin="10">
- <ListBox.ItemTemplate>
- <DataTemplate>
- <StackPanel>
- <StackPanel.InputBindings>
- <MouseBinding Gesture="LeftDoubleClick"
- Command="{Binding DataContext.RootAuswaehlen, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, Mode=OneWay}"
- CommandParameter="{Binding }" />
- </StackPanel.InputBindings>
- <TextBlock Text="{Binding}"/>
- </StackPanel>
- </DataTemplate>
- </ListBox.ItemTemplate>
- </ListBox>
- <ListBox Grid.Row="1" Grid.Column="2" ItemsSource="{Binding UnterVerzeichnisseStrings, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Background="Transparent" Foreground="{DynamicResource VordergrundfarbeBrush}" Margin="10" SelectedIndex="{Binding UnterVerzeichnisIndex, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}">
- <ListBox.ItemTemplate>
- <DataTemplate>
- <StackPanel>
- <StackPanel.InputBindings>
- <MouseBinding Gesture="LeftDoubleClick"
- Command="{Binding DataContext.VerzeichnisAuswaehlen, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, Mode=OneWay}"
- CommandParameter="{Binding }" />
- </StackPanel.InputBindings>
- <TextBlock Text="{Binding}"/>
- </StackPanel>
- </DataTemplate>
- </ListBox.ItemTemplate>
- </ListBox>
- <Grid Grid.Row="2" Grid.Column="2">
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="85"/>
- <ColumnDefinition Width="*"/>
- <ColumnDefinition Width="130"/>
- </Grid.ColumnDefinitions>
- <Label Content="Dateiname:" Margin="10, 0, 0, 0" Grid.Column="0" Background="Transparent" Foreground="{DynamicResource VordergrundfarbeBrush}" VerticalAlignment="Center" HorizontalAlignment="Left" Visibility="{Binding DateiNameSichtBar, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>
- <TextBox Grid.Column="1" Text="{Binding Dateiname, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Background="Transparent" Foreground="{DynamicResource VordergrundfarbeBrush}" Visibility="{Binding DateiNameSichtBar, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" Margin="0, 0, 10, 0"/>
- <ComboBox Grid.Column="2" ItemsSource="{Binding DateiTypen, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" IsEditable="False" SelectedItem="{Binding GewaehlterDateiTyp, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" Margin="0, 0, 10, 0" SelectedIndex="{Binding DateiTypIndex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Stretch" Visibility="{Binding DateiNameSichtBar, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>
- </Grid>
- <Grid Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="3">
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="50*"/>
- <ColumnDefinition Width="50*"/>
- </Grid.ColumnDefinitions>
- <Button Margin="10" Content="OK" Command="{Binding OK}" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
- <Button Margin="10" Content="Abbrechen" Command="{Binding Abbrechen}" Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
- </Grid>
- </Grid>
Und das ViewModel:
Quellcode
- Option Strict On
- Imports System.Collections.ObjectModel
- Imports System.IO
- Imports System.Windows
- Imports System.Windows.Input
- Imports Microsoft.VisualBasic
- Public Class FolderBrowserViewModel
- Inherits Instrastructure.ViewModelBase
- 'Private dialogService As Services.IDialogWindowService = Services.ServiceContainer.GetService(Of Services.IDialogWindowService)
- Public Optionen As Options
- Private _DateiTypen As ObservableCollection(Of String)
- Public Property DateiTypen As ObservableCollection(Of String)
- Get
- Return _DateiTypen
- End Get
- Set(value As ObservableCollection(Of String))
- _DateiTypen = value
- RaisePropertyChanged()
- End Set
- End Property
- Public Property Ergebnis As String
- Public Enum Options
- FolderPicker = 0
- OpenFile = 1
- SaveFile = 2
- End Enum
- Public Sub New() 'zum Testen hier ein parameterloser Konstruktor
- RootIndex = -1
- Optionen = Options.OpenFile
- DateiTypen = New ObservableCollection(Of String)
- Initialisieren()
- 'AktuellerOrdner = ""
- End Sub
- Public Sub New(argStartVerzeichnis As String, argOptions As Options, argDateiTypen As List(Of String))
- RootIndex = -1
- Optionen = argOptions
- DateiTypen = New ObservableCollection(Of String)(argDateiTypen)
- Initialisieren()
- If System.IO.Directory.Exists(argStartVerzeichnis) Then
- AktuellerOrdner = argStartVerzeichnis
- End If
- End Sub
- Private Sub Initialisieren()
- If IsInDesignMode = False Then
- RootVerzeichnisse = New ObservableCollection(Of Model.RootVerzeichnisseModel)
- UnterVerzeichnisse = New ObservableCollection(Of String)
- Dim LaufWerkTyp As String
- For Each Laufwerk In System.IO.DriveInfo.GetDrives
- If Laufwerk.DriveType = DriveType.CDRom Then
- LaufWerkTyp = "CD/DVD-ROM"
- ElseIf Laufwerk.DriveType = DriveType.Fixed Then
- LaufWerkTyp = "Festplatte"
- ElseIf Laufwerk.DriveType = DriveType.Network Then
- LaufWerkTyp = "Netzlaufwerk"
- ElseIf Laufwerk.DriveType = DriveType.Ram Then
- LaufWerkTyp = "RAM-Speicher"
- ElseIf Laufwerk.DriveType = DriveType.Removable Then
- LaufWerkTyp = "Wechseldatenträger"
- Else
- LaufWerkTyp = "Unbekannter Datenträgertyp"
- End If
- Dim LaufwerksName As String
- Try
- LaufwerksName = Laufwerk.VolumeLabel
- Catch ex As Exception
- LaufwerksName = ""
- End Try
- RootVerzeichnisse.Add(New Model.RootVerzeichnisseModel(Laufwerk.Name, LaufwerksName, LaufWerkTyp))
- Next
- RootVerzeichnisse.Add(New Model.RootVerzeichnisseModel(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), "Meine Bilder", "Bibliothek"))
- RootVerzeichnisse.Add(New Model.RootVerzeichnisseModel(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Mein Desktop", "Bibliothek"))
- RootVerzeichnisse.Add(New Model.RootVerzeichnisseModel(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Meine Dokumente", "Bibliothek"))
- RootVerzeichnisse.Add(New Model.RootVerzeichnisseModel(Environment.GetFolderPath(Environment.SpecialFolder.MyMusic), "Meine Musik", "Bibliothek"))
- RootVerzeichnisse.Add(New Model.RootVerzeichnisseModel(Environment.GetFolderPath(Environment.SpecialFolder.MyVideos), "Meine Videos", "Bibliothek"))
- RootVerzeichnisse.Add(New Model.RootVerzeichnisseModel(Environment.GetFolderPath(Environment.SpecialFolder.CommonPictures), "Öffentliche Bilder", "Bibliothek"))
- RootVerzeichnisse.Add(New Model.RootVerzeichnisseModel(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments), "Öffentliche Dokumente", "Bibliothek"))
- RootVerzeichnisse.Add(New Model.RootVerzeichnisseModel(Environment.GetFolderPath(Environment.SpecialFolder.CommonMusic), "Öffentliche Musik", "Bibliothek"))
- RootVerzeichnisse.Add(New Model.RootVerzeichnisseModel(Environment.GetFolderPath(Environment.SpecialFolder.CommonVideos), "Öffentliche Videos", "Bibliothek"))
- If Optionen = Options.SaveFile Then
- DateiNameSichtBar = Visibility.Visible
- Else
- DateiNameSichtBar = Visibility.Hidden
- End If
- If (Optionen = Options.OpenFile) Or (Optionen = Options.SaveFile) Then
- If DateiTypen.Count > 0 Then DateiTypIndex = 0
- End If
- End If
- End Sub
- Private _OK As ICommand
- Public ReadOnly Property OK As ICommand
- Get
- If _OK Is Nothing Then _OK = New ViewModel.Instrastructure.RelayCommand(AddressOf OK_Execute)
- Return _OK
- End Get
- End Property
- Private Sub OK_Execute(obj As Object)
- Select Case Optionen
- Case Options.FolderPicker
- Ergebnis = AktuellerOrdner
- Case Options.OpenFile
- If UnterVerzeichnisIndex <> -1 Then
- Dim IsDir As Boolean = System.IO.File.GetAttributes(UnterVerzeichnisse(UnterVerzeichnisIndex)) = FileAttributes.Directory
- If IsDir Then
- 'Dim OKVM = New OKDialogViewModel
- 'OKVM.Meldung = "Du hast einen Ordner ausgewählt. Bitte wähle eine Datei aus."
- 'dialogService.ShowModalDialog("", OKVM, Me, True, False, Services.WindowStyle.None, Services.ResizeMode.NoResize, 500, Services.SizeToContent.Height, Services.WindowStartupLocation.CenterOwner, "")
- MessageBox.Show("Du hast einen Ordner ausgewählt. Bitte wähle eine Datei aus.")
- Return
- Else
- Ergebnis = UnterVerzeichnisse(UnterVerzeichnisIndex)
- End If
- Else
- 'Dim OKVM = New OKDialogViewModel
- 'OKVM.Meldung = "Bitte wähle eine Datei aus."
- 'dialogService.ShowModalDialog("", OKVM, Me, True, False, Services.WindowStyle.None, Services.ResizeMode.NoResize, 500, Services.SizeToContent.Height, Services.WindowStartupLocation.CenterOwner, "")
- MessageBox.Show("Bitte wähle eine Datei aus.")
- Return
- End If
- Case Options.SaveFile
- If String.IsNullOrEmpty(Dateiname) Then
- 'Dim OKVM = New OKDialogViewModel
- 'OKVM.Meldung = "Bitte gebe einen Dateinamen an."
- 'dialogService.ShowModalDialog("", OKVM, Me, True, False, Services.WindowStyle.None, Services.ResizeMode.NoResize, 500, Services.SizeToContent.Height, Services.WindowStartupLocation.CenterOwner, "")
- MessageBox.Show("Bitte gebe einen Dateinamen an.")
- Return
- End If
- If String.IsNullOrEmpty(GewaehlterDateiTyp) Then
- 'Dim OKVM = New OKDialogViewModel
- 'OKVM.Meldung = "Bitte wähle einen Dateityp aus."
- 'dialogService.ShowModalDialog("", OKVM, Me, True, False, Services.WindowStyle.None, Services.ResizeMode.NoResize, 500, Services.SizeToContent.Height, Services.WindowStartupLocation.CenterOwner, "")
- MessageBox.Show("Bitte wähle einen Dateityp aus.")
- Return
- End If
- For Each Zeichen In System.IO.Path.GetInvalidFileNameChars
- If Dateiname.Contains(Zeichen) Then
- 'Dim OKVM = New OKDialogViewModel
- 'OKVM.Meldung = "Du hast ein ungültiges Zeichen (" & Zeichen & ") im Dateinamen. Bitte gebe einen gültigen Dateinamen an."
- 'dialogService.ShowModalDialog("", OKVM, Me, True, False, Services.WindowStyle.None, Services.ResizeMode.NoResize, 500, Services.SizeToContent.Height, Services.WindowStartupLocation.CenterOwner, "")
- MessageBox.Show("Du hast ein ungültiges Zeichen (" & Zeichen & ") im Dateinamen. Bitte gebe einen gültigen Dateinamen an.")
- Return
- End If
- Next
- Ergebnis = AktuellerOrdner & "\" & Dateiname & GewaehlterDateiTyp
- End Select
- 'dialogService.CloseDialog(Me)
- End Sub
- Private _Abbrechen As ICommand
- Public ReadOnly Property Abbrechen As ICommand
- Get
- If _Abbrechen Is Nothing Then _Abbrechen = New ViewModel.Instrastructure.RelayCommand(AddressOf Abbrechen_Execute)
- Return _Abbrechen
- End Get
- End Property
- Private Sub Abbrechen_Execute(obj As Object)
- Ergebnis = ""
- 'dialogService.CloseDialog(Me)
- End Sub
- Private _Dateiname As String
- Public Property Dateiname As String
- Get
- Return _Dateiname
- End Get
- Set(value As String)
- _Dateiname = value
- RaisePropertyChanged()
- End Set
- End Property
- Private _RootVerzeichnisse As ObservableCollection(Of Model.RootVerzeichnisseModel)
- Public Property RootVerzeichnisse As ObservableCollection(Of Model.RootVerzeichnisseModel)
- Get
- Return _RootVerzeichnisse
- End Get
- Set(value As ObservableCollection(Of Model.RootVerzeichnisseModel))
- _RootVerzeichnisse = value
- RaisePropertyChanged()
- End Set
- End Property
- Public ReadOnly Property RootVerzeichnisseStrings As ObservableCollection(Of String)
- Get
- Dim retList As New List(Of String)
- For Each Laufwerk In RootVerzeichnisse
- If Laufwerk.Typ <> "Bibliothek" Then
- retList.Add(Laufwerk.Pfad & " " & Laufwerk.Bezeichnung & " (" & Laufwerk.Typ & ")")
- Else
- retList.Add(Laufwerk.Bezeichnung & " (" & Laufwerk.Typ & ")")
- End If
- Next
- Return New ObservableCollection(Of String)(retList)
- RaisePropertyChanged()
- End Get
- End Property
- Private _UnterVerzeichnisse As ObservableCollection(Of String)
- Public Property UnterVerzeichnisse As ObservableCollection(Of String)
- Get
- Return _UnterVerzeichnisse
- End Get
- Set(value As ObservableCollection(Of String))
- _UnterVerzeichnisse = value
- RaisePropertyChanged()
- End Set
- End Property
- 'Private _RootGewaehlt As ICommand
- 'Public ReadOnly Property RootGewaehlt As ICommand
- ' Get
- ' If _RootGewaehlt Is Nothing Then _RootGewaehlt = New ViewModel.Instrastructure.RelayCommand(AddressOf RootGewaehlt_Execute)
- ' Return _RootGewaehlt
- ' End Get
- 'End Property
- 'Private Sub RootGewaehlt_Execute(obj As Object)
- ' UnterVerzeichnisse = New ObservableCollection(Of String)
- ' For Each Unterverzeichnis In System.IO.Directory.GetDirectories(RootVerzeichnisse(RootIndex).Pfad)
- ' UnterVerzeichnisse.Add(Unterverzeichnis)
- ' Next
- ' RaisePropertyChanged(NameOf(UnterVerzeichnisse))
- 'End Sub
- Private _RootIndex As Integer
- Public Property RootIndex As Integer
- Get
- Return _RootIndex
- End Get
- Set(value As Integer)
- _RootIndex = value
- 'If value <> -1 Then AktuellerOrdner = RootVerzeichnisse(value).Pfad
- RaisePropertyChanged()
- End Set
- End Property
- Private _AktuellerOrdner As String
- Public Property AktuellerOrdner As String
- Get
- Return _AktuellerOrdner
- End Get
- Set(value As String)
- Dim UnsortierteListe As New List(Of String)
- UnterVerzeichnisse = New ObservableCollection(Of String)
- Try
- For Each Unterverzeichnis In System.IO.Directory.GetDirectories(value)
- UnsortierteListe.Add(Unterverzeichnis)
- Next
- UnsortierteListe.Sort()
- UnterVerzeichnisse = New ObservableCollection(Of String)(UnsortierteListe)
- UnsortierteListe.Clear()
- If (Optionen = Options.OpenFile) Or (Optionen = Options.SaveFile) Then
- For Each Datei In System.IO.Directory.GetFiles(value)
- For Each DateiTyp In DateiTypen
- If Datei.ToLower.EndsWith(DateiTyp) Then
- UnsortierteListe.Add(Datei)
- End If
- Next
- UnsortierteListe.Sort()
- For Each item In UnsortierteListe
- UnterVerzeichnisse.Add(item)
- Next
- 'UnterVerzeichnisse.Add(Datei)
- Next
- End If
- _AktuellerOrdner = value
- Catch ex As Exception
- 'Dim OKVM = New OKDialogViewModel
- 'OKVM.Meldung = "Dieser Ordner konnte nicht geöffnet werden." & Environment.NewLine & "Fehlermeldung: " & ex.Message
- 'dialogService.ShowModalDialog("", OKVM, Me, True, False, Services.WindowStyle.None, Services.ResizeMode.NoResize, 500, Services.SizeToContent.Height, Services.WindowStartupLocation.CenterOwner, "")
- MessageBox.Show("Dieser Ordner konnte nicht geöffnet werden." & Environment.NewLine & "Fehlermeldung: " & ex.Message)
- Return
- End Try
- RaisePropertyChanged(NameOf(UnterVerzeichnisseStrings))
- RaisePropertyChanged()
- End Set
- End Property
- Private _UnterVerzeichnisIndex As Integer
- Public Property UnterVerzeichnisIndex As Integer
- Get
- Return _UnterVerzeichnisIndex
- End Get
- Set(value As Integer)
- _UnterVerzeichnisIndex = value
- 'If (value <> -1) Then
- ' Dim IsDir As Boolean = System.IO.File.GetAttributes(UnterVerzeichnisse(value)) = FileAttributes.Directory
- ' If IsDir Then AktuellerOrdner = UnterVerzeichnisse(value)
- 'End If
- RaisePropertyChanged()
- End Set
- End Property
- Public ReadOnly Property UnterVerzeichnisseStrings As ObservableCollection(Of String)
- Get
- Dim retList As New List(Of String)
- For Each Verzeichnis In UnterVerzeichnisse
- retList.Add(New System.IO.DirectoryInfo(Verzeichnis).Name)
- Next
- Return New ObservableCollection(Of String)(retList)
- RaisePropertyChanged()
- End Get
- End Property
- Private _SpringeOrdnerDarueber As ICommand
- Public ReadOnly Property SpringeOrdnerDarueber As ICommand
- Get
- If _SpringeOrdnerDarueber Is Nothing Then _SpringeOrdnerDarueber = New ViewModel.Instrastructure.RelayCommand(AddressOf SpringeOrdnerDarueber_Execute)
- Return _SpringeOrdnerDarueber
- End Get
- End Property
- Private Sub SpringeOrdnerDarueber_Execute(obj As Object)
- If (Not String.IsNullOrEmpty(AktuellerOrdner)) AndAlso (Not AktuellerOrdner.Length = 3) Then
- Dim OrdnerInfo As New System.IO.DirectoryInfo(AktuellerOrdner)
- AktuellerOrdner = OrdnerInfo.Parent.FullName
- End If
- End Sub
- Private _GewaehlterDateiTyp As String
- Public Property GewaehlterDateiTyp As String
- Get
- Return _GewaehlterDateiTyp
- End Get
- Set(value As String)
- _GewaehlterDateiTyp = value
- RaisePropertyChanged()
- End Set
- End Property
- Private _DateiNameSichtBar As Visibility
- Public Property DateiNameSichtBar As Visibility
- Get
- Return _DateiNameSichtBar
- End Get
- Set(value As Visibility)
- _DateiNameSichtBar = value
- RaisePropertyChanged()
- End Set
- End Property
- Private _NeuenOrdnerErstellen As ICommand
- Public ReadOnly Property NeuenOrdnerErstellen As ICommand
- Get
- If _NeuenOrdnerErstellen Is Nothing Then _NeuenOrdnerErstellen = New ViewModel.Instrastructure.RelayCommand(AddressOf NeuenOrdnerErstellen_Execute)
- Return _NeuenOrdnerErstellen
- End Get
- End Property
- Private Sub NeuenOrdnerErstellen_Execute(obj As Object)
- Dim result As String = Interaction.InputBox("Bitte gebe einen Namen für den neuen Ordner ein:")
- 'Dim InputBoxVM = New ViewModel.InputBoxDialogViewModel("Bitte gebe einen Namen für den neuen Ordner ein:")
- 'dialogService.ShowModalDialog("", InputBoxVM, Me, True, False, Services.WindowStyle.None, Services.ResizeMode.NoResize, 500, Services.SizeToContent.Height, Services.WindowStartupLocation.CenterOwner, "")
- If result = "" Then Return
- Dim NeuerOrdnerName As String = result
- 'Dim NeuerOrdnerName As String = Interaction.InputBox("Bitte gebe einen Namen für den neuen Ordner ein.")
- For Each Zeichen In System.IO.Path.GetInvalidPathChars
- If NeuerOrdnerName.Contains(Zeichen) Then
- 'Dim OKVM = New OKDialogViewModel
- 'OKVM.Meldung = "Du hast ein ungültiges Zeichen (" & Zeichen & ") im neuen Ordnernamen. Bitte gebe einen gültigen Ordnernamen an."
- 'dialogService.ShowModalDialog("", OKVM, Me, True, False, Services.WindowStyle.None, Services.ResizeMode.NoResize, 500, Services.SizeToContent.Height, Services.WindowStartupLocation.CenterOwner, "")
- MessageBox.Show("Du hast ein ungültiges Zeichen (" & Zeichen & ") im neuen Ordnernamen. Bitte gebe einen gültigen Ordnernamen an.")
- Return
- End If
- Next
- Try
- System.IO.Directory.CreateDirectory(AktuellerOrdner & "\" & NeuerOrdnerName)
- AktuellerOrdner = AktuellerOrdner
- Catch ex As Exception
- 'Dim OKVM = New OKDialogViewModel
- 'OKVM.Meldung = "Der neue Ordner konnte nicht erstellt werden. " & Environment.NewLine & "Fehlermeldung: " & ex.Message
- 'dialogService.ShowModalDialog("", OKVM, Me, True, False, Services.WindowStyle.None, Services.ResizeMode.NoResize, 500, Services.SizeToContent.Height, Services.WindowStartupLocation.CenterOwner, "")
- MessageBox.Show("Der neue Ordner konnte nicht erstellt werden. " & Environment.NewLine & "Fehlermeldung: " & ex.Message)
- End Try
- End Sub
- Private _Umbenennen As ICommand
- Public ReadOnly Property Umbenennen As ICommand
- Get
- If _Umbenennen Is Nothing Then _Umbenennen = New ViewModel.Instrastructure.RelayCommand(AddressOf Umbenennen_Execute)
- Return _Umbenennen
- End Get
- End Property
- Private Sub Umbenennen_Execute(obj As Object)
- 'Dim InputBoxVM = New ViewModel.InputBoxDialogViewModel("Bitte gebe einen neuen Namen für den aktuellen Ordner ein:")
- 'dialogService.ShowModalDialog("", InputBoxVM, Me, True, False, Services.WindowStyle.None, Services.ResizeMode.NoResize, 500, Services.SizeToContent.Height, Services.WindowStartupLocation.CenterOwner, "")
- Dim result As String = Interaction.InputBox("Bitte gebe einen neuen Namen für den aktuellen Ordner ein:")
- If result = "" Then Return
- Dim NeuerOrdnerName As String = result
- 'Dim NeuerOrdnerName As String = Interaction.InputBox("Bitte gebe einen neuen Namen für den aktuellen Ordner ein.")
- For Each Zeichen In System.IO.Path.GetInvalidPathChars
- If NeuerOrdnerName.Contains(Zeichen) Then
- 'Dim OKVM = New OKDialogViewModel
- 'OKVM.Meldung = "Du hast ein ungültiges Zeichen (" & Zeichen & ") im neuen Ordnernamen. Bitte gebe einen gültigen Ordnernamen an."
- 'dialogService.ShowModalDialog("", OKVM, Me, True, False, Services.WindowStyle.None, Services.ResizeMode.NoResize, 500, Services.SizeToContent.Height, Services.WindowStartupLocation.CenterOwner, "")
- MessageBox.Show("Du hast ein ungültiges Zeichen (" & Zeichen & ") im neuen Ordnernamen. Bitte gebe einen gültigen Ordnernamen an.")
- Return
- End If
- Next
- Try
- Dim OrdnerInfo As New System.IO.DirectoryInfo(AktuellerOrdner)
- Dim ParentVerzeichnis As String = OrdnerInfo.Parent.FullName
- System.IO.Directory.Move(AktuellerOrdner, ParentVerzeichnis & "\" & NeuerOrdnerName)
- AktuellerOrdner = ParentVerzeichnis & "\" & NeuerOrdnerName
- Catch ex As Exception
- 'Dim OKVM = New OKDialogViewModel
- 'OKVM.Meldung = "Der Ordner konnte nicht umbenannt werden. " & Environment.NewLine & "Fehlermeldung: " & ex.Message
- 'dialogService.ShowModalDialog("", OKVM, Me, True, False, Services.WindowStyle.None, Services.ResizeMode.NoResize, 500, Services.SizeToContent.Height, Services.WindowStartupLocation.CenterOwner, "")
- MessageBox.Show("Der Ordner konnte nicht umbenannt werden. " & Environment.NewLine & "Fehlermeldung: " & ex.Message)
- End Try
- End Sub
- Private _DateiTypIndex As Integer
- Public Property DateiTypIndex As Integer
- Get
- Return _DateiTypIndex
- End Get
- Set(value As Integer)
- _DateiTypIndex = value
- RaisePropertyChanged()
- End Set
- End Property
- Private _VerzeichnisAuswaehlen As ICommand
- Public ReadOnly Property VerzeichnisAuswaehlen As ICommand
- Get
- If _VerzeichnisAuswaehlen Is Nothing Then _VerzeichnisAuswaehlen = New ViewModel.Instrastructure.RelayCommand(AddressOf VerzeichnisAuswaehlen_Execute)
- Return _VerzeichnisAuswaehlen
- End Get
- End Property
- Private Sub VerzeichnisAuswaehlen_Execute(obj As Object)
- If (UnterVerzeichnisIndex <> -1) Then
- Dim IsDir As Boolean = System.IO.File.GetAttributes(UnterVerzeichnisse(UnterVerzeichnisIndex)) = FileAttributes.Directory
- If IsDir Then AktuellerOrdner = UnterVerzeichnisse(UnterVerzeichnisIndex)
- End If
- End Sub
- Private _RootAuswaehlen As ICommand
- Public ReadOnly Property RootAuswaehlen As ICommand
- Get
- If _RootAuswaehlen Is Nothing Then _RootAuswaehlen = New ViewModel.Instrastructure.RelayCommand(AddressOf RootAuswaehlen_Execute)
- Return _RootAuswaehlen
- End Get
- End Property
- Private Sub RootAuswaehlen_Execute(obj As Object)
- If RootIndex <> -1 Then AktuellerOrdner = RootVerzeichnisse(RootIndex).Pfad
- End Sub
- End Class
Das Ganze gern erweitern, modifizieren und/oder verwenden (z.B. in einem modalen Dialog anzeigen)
Oder euren Senf dazugeben
Bei Fragen bitte melden.
Edit: Hab noch ein paar Bugfixes gemacht, neuer Download siehe neuester Post.
Und weils so schön war: Bis heute (09.01.2024) wurde das File 63 Mal heruntergeladen :-)
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „kafffee“ ()