Ich möchte einen DataGrid
erstellen, um Informationen anzuzeigen, die ich von einem LogFile
gelesen habe. Das DataGrid
zeigt die aufgetretenen Fehler an, die in LogFiles
gefunden werden. Das Lesen und Erstellen von Objekten für jeden Fehler ist kein Problem.C# wpf mvvm DataGrid Hyperlink zum Pfad
Jetzt muss ich den LogFile
Pfad zum DataGrid
hinzufügen und es klickbar machen. Wenn Sie also auf den Pfad klicken, sollte die LogFile
öffnen. Ich verwende mvvm
Muster, also kein Code in Code-behind erlaubt.
fand ich 2 verschiedene Ideen zu meinem Problem, aber keiner von ihnen es gelöst:
erste mit einem TemplateColumn
:
<DataGrid HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Margin="10"
ItemsSource="{Binding Path=Errors}"
SelectionMode="Single"
SelectedItem="{Binding Mode=OneWayToSource, Path=SelectedError}"
AutoGenerateColumns="False"
IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Header="{Binding Path=Data.Texts[FaultyFileCaption], Source={StaticResource DataContextProxy}}" Binding="{Binding Path=FaultyFile}" Width="Auto"/>
<DataGridTextColumn Header="{Binding Path=Data.Texts[LanguageCaption], Source={StaticResource DataContextProxy}}" Binding="{Binding Path=Language}" Width="Auto"/>
<DataGridTextColumn Header="{Binding Path=Data.Texts[KindCaption], Source={StaticResource DataContextProxy}}" Binding="{Binding Path=Type}" Width="Auto"/>
<DataGridTextColumn Header="{Binding Path=Data.Texts[ErrorCodeCaption], Source={StaticResource DataContextProxy}}" Binding="{Binding Path=ErrorCode}" Width="Auto"/>
<DataGridTextColumn Header="{Binding Path=Data.Texts[SourcePathCaption], Source={StaticResource DataContextProxy}}" Binding="{Binding Path=SourcePath}" Width="Auto"/>
<DataGridTemplateColumn Header="{Binding Path=Data.Texts[LogFilePath], Source={StaticResource DataContextProxy}}" Width="Auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock>
<Hyperlink Command="{Binding ElementName=ErrorDataGrid, Path=Data.CmdLogFilePathClick, Source={StaticResource DataContextProxy}}"/>
<TextBlock Text="{Binding Path=LogFilePath}"/>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
und die zweite eine HyperlinkColumn
mit:
<DataGrid HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Margin="10"
ItemsSource="{Binding Path=Errors}"
SelectionMode="Single"
SelectedItem="{Binding Mode=OneWayToSource, Path=SelectedError}"
AutoGenerateColumns="False"
IsReadOnly="True"
Name="ErrorDataGrid">
<DataGrid.Columns>
<DataGridTextColumn Header="{Binding Path=Data.Texts[FaultyFileCaption], Source={StaticResource DataContextProxy}}" Binding="{Binding Path=FaultyFile}" Width="Auto"/>
<DataGridTextColumn Header="{Binding Path=Data.Texts[LanguageCaption], Source={StaticResource DataContextProxy}}" Binding="{Binding Path=Language}" Width="Auto"/>
<DataGridTextColumn Header="{Binding Path=Data.Texts[KindCaption], Source={StaticResource DataContextProxy}}" Binding="{Binding Path=Type}" Width="Auto"/>
<DataGridTextColumn Header="{Binding Path=Data.Texts[ErrorCodeCaption], Source={StaticResource DataContextProxy}}" Binding="{Binding Path=ErrorCode}" Width="Auto"/>
<DataGridTextColumn Header="{Binding Path=Data.Texts[SourcePathCaption], Source={StaticResource DataContextProxy}}" Binding="{Binding Path=SourcePath}" Width="Auto"/>
<DataGridHyperlink Header="{Binding Path=Data.Texts[LogFilePath], Source={StaticResource DataContextProxy}}" Binding="{Binding Path=LogFilePath}" Width="Auto">
<DataGridHyperlinkColumn.ElementStyle>
<Style>
<EventSetter Event="Hyperlink.Click" Handler="{Binding Path=Data.DG_Hyperlink_Click, Source={StaticResource DataContextProxy}}"/>
</Style>
</DataGridHyperlinkColumn.ElementStyle>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
In beiden Fällen öffnet mein Befehl oder Handler nur die Datei auf dem angegebenen Pfad.
Ich hoffe, dass Sie mein Problem und vielen Dank für jede Hilfe verstehe ich :)
"mvvm Muster verwendet, so dass kein Code in Code-Behind erlaubt", wo hast du das gelesen? – Clemens
MVVM ist ein Muster, das die Geschäftslogik aus dem Markup/GUI entfernt – FakeCaleb
Nun mein Chef sagte mir, Code in Code-Behind nicht zu schreiben. Nur Konstruktor erlaubt. – Max