2016-12-17 8 views
0

Ich bin ein Neuling WPF. Ich muss das folgende erreichen: Ich habe ein ModelView, das Observable Sammlung der Klasse "Edata" enthält. Edata enthält auch eine weitere ObservableColection der Klasse "eParams", die 4 Eigenschaften enthält.DataContext des Elternteils

jetzt habe ich listbox, die die Liste der Edata enthält, und eine andere Listenansicht, die die params enthält. Alles funktioniert gut. Die Herausforderung ist der Tooltip. Ich habe in der Edata Class Property namens AsStringToolTip. Ich verwende diese Eigenschaft, um dem Benutzer einen Hinweis zu geben und Informationen über die Zeile, in der sich die Maus befindet, mitzuteilen.

<ListBox x:Name="lbx1" Grid.Column="0" Grid.Row="1" ItemsSource="{Binding EData}" VerticalAlignment="Center" HorizontalAlignment="Center"> 
     <ListBox.ItemsPanel> 
      <ItemsPanelTemplate> 
       <VirtualizingStackPanel VirtualizingPanel.VirtualizationMode="Recycling"/> 
      </ItemsPanelTemplate> 

     </ListBox.ItemsPanel> 

     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Style="{StaticResource Description}" TextWrapping="Wrap"> 
        <TextBlock.Text> 
         <MultiBinding StringFormat="{}{0} , {1}"> 
          <Binding Path="Edata.category" /> 
          <Binding Path="Edata.EId" /> 

         </MultiBinding> 
        </TextBlock.Text> 
       </TextBlock> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 

    </ListBox> 



    <!-- No Compar ListView --> 
    <ListView Grid.Column="1" Grid.Row="1" ItemsSource="{Binding SelectedItem.Edata.eparams ,ElementName=lbx1}" Grid.IsSharedSizeScope="True" > 
     <ListView.ItemsPanel> 
      <ItemsPanelTemplate> 
       <VirtualizingStackPanel VirtualizingPanel.VirtualizationMode="Recycling"/> 
      </ItemsPanelTemplate> 
     </ListView.ItemsPanel> 
     <ListView.View> 
      <GridView > 

       <GridViewColumn Header="Name" > 
        <GridViewColumn.CellTemplate> 
         <DataTemplate > 
          <StackPanel Orientation="Horizontal" > 
           <TextBlock Text="{Binding Name}"> 
            <TextBlock.ToolTip> 
             **<TextBlock DataContext="{Binding SelectedValue,ElementName=lbx1}" Text="{Binding Path=AsStringToolTip}">** 

             </TextBlock> 
            </TextBlock.ToolTip> 

            </TextBlock> 



          </StackPanel> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 

       <GridViewColumn Header="ValueString" > 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <StackPanel Orientation="Horizontal" > 
           <TextBlock Text="{Binding ValueString}" /> 


          </StackPanel> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
       <GridViewColumn Header="value" > 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Text="{Binding value}" /> 

          </StackPanel> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 

       <GridViewColumn Header="paramtype"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Text="{Binding paramtype}" /> 


          </StackPanel> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 

      </GridView> 
     </ListView.View> 
    </ListView> 

Ich hoffe, ich bin genug klar. jede Beratung. Momentan zeigt der Tooltip nichts !!!

Antwort

1

Da der Tooltip in seinem eigenen visuellen Baum befindet kann es nicht die List-Box finden, wenn die Bindung ausgewertet wird.

Aber man konnte die Tag-Eigenschaft des Textblockes an der List-Box binden und bindet dann das Element im Tooltip an den Placement des ToolTip selbst. Es ist wahrscheinlich besser mit einigem Probe-Markup erklärt:

<GridViewColumn Header="Name" > 
    <GridViewColumn.CellTemplate> 
     <DataTemplate > 
      <StackPanel Orientation="Horizontal" > 
       <TextBlock Text="Name" Tag="{Binding ElementName=lbx1}"> 
        <TextBlock.ToolTip> 
         <ToolTip> 
          <TextBlock Text="{Binding PlacementTarget.Tag.SelectedItem.AsStringToolTip, 
                RelativeSource={RelativeSource AncestorType=ToolTip}}" /> 
         </ToolTip> 
        </TextBlock.ToolTip> 
            </TextBlock> 
      </StackPanel> 
     </DataTemplate> 
    </GridViewColumn.CellTemplate> 
</GridViewColumn> 

Das Placement im Bindungspfad bezieht sich auf den „Namen“ Textblock. Die Tag-Eigenschaft dieses TextBlocks gibt einen Verweis auf die ListBox "lbx1" zurück. Sie können dann die AsStringToolTip-Eigenschaft des aktuell ausgewählten Edata-Objekts abrufen.

Verwandte Themen