Ich bin neu in WPF und leiden mit einem vorhandenen Code.WPF: Klicken auf eine DataGrid-Zeile in einer TreeView triggert nicht TreeView.SelectedItemChanged
Wir haben einen Baum, der viele Zweige/Blätter hat. In einem Zweig haben wir ein DataGrid.
Wenn wir auf den leeren Bereich des Rasters klicken (wo keine Zeilen sind), dann wurde TreeView.SelectedItemChanged korrekt aufgerufen. In unserem Fall SelectedItem = 'SelectedGridBorder' (siehe XAML unten)
Aber wenn wir auf eine Zeile/Zelle des Rasters klicken, wird die Zeile fokussiert, aber TreeView.SelectedItemChanged wird NICHT aufgerufen. Also TreeView.SelectedItem ist immer noch das zuvor ausgewählte Element. Ist es möglich, dieses (nach mir) logische Verhalten zu erreichen, so sollte TreeView.SelectedItemChanged beim Klicken auf eine Zeile automatisch aufgerufen werden, und TreeView.SelectedItem sollte "SelectedGridBorder" sein, genau wie beim Klicken auf den Rasterbereich ohne Zeilen sind.
Warum unterscheidet sich 'SelectedItemChanged' darin, auf eine Rasterzeile zu klicken oder auf ein Raster zu klicken, in dem sich keine Zeilen befinden?
Danke.
XAML:
<TreeView x:Name="CalculationDataTree" .....>
<Cinch:EventCommander.Mappings>
<Cinch:CommandEvent
Command="{Binding Path=DataContext.SelectionChangeCommand ....
Event="SelectedItemChanged"
Cinch:CommandEvent.CommandParameter="{Binding ElementName=CalculationDataTree,Path=SelectedItem}"/>
...
<TreeViewItem x:Name="Params" ...>
<TreeViewItem.Header>
<TextBlock>Parameters</TextBlock>
</TreeViewItem.Header>
<TreeViewItem x:Name="Dates" Margin="0,6,0,0">
<TreeViewItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Margin="4,10">Date(s)</TextBlock>
<ContentControl Margin="4,6" Content="{Binding}" ContentTemplate="{StaticResource OwnEditorTemplate}" />
</StackPanel>
</TreeViewItem.Header>
</TreeViewItem>
<Border Name="SelectedGridBorder" ... >
<StackPanel Orientation="Vertical">
<TextBlock Margin="4,10">Other parameters</TextBlock>
<StackPanel Orientation="Horizontal">
<DockPanel>
<dg:DataGrid Height="300" Width="600" Name="dataGrid" ....>
<dg:DataGrid.Columns>
...
</dg:DataGrid.Columns>
Dank Ihren Kommentar, in der Zwischenzeit ich es auch fixiert, das andere Q half mir: http: // Stackoverflow .com/questions/6586488/wpf-treeview-selecteditemchanged-nicht-feuernd. Wie löste ich: in 'Grid_GotFocus', rufe ich' (VisualHelper.GetAncestorByType (e.Quelle als DependencyObject, typeof (TreeViewItem)) als TreeViewItem) .IsSelected = true; 'Ich fragte mich, wie es funktionieren könnte, da Grid keine hat Direct TreeViewItem Ancestor, aber ich debuggte, und es hatte - aber Sie machten es klar (WPF erstellt es automatisch). Vielen Dank! – Zotyi