2016-12-17 10 views
0

私は初心者のWPFです。私は次のことを習得する必要があります。私はModelViewにObservableクラス "Edata"のコレクションが含まれています。 Edataには、4つのプロパティを含むクラス "eParams"のObservableColelctionも含まれています。親のDataContext

私はEdataのリストを含むリストボックスと、paramsを含む別のリストビューを持っています。 すべてのことがうまく動作します。課題はツールチップです。 AsStringToolTipというEdataクラスのプロパティにあります。このプロパティを使用して、ユーザーにヒントを与え、マウスがある行に関する情報を簡単に説明します。

<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> 

私は十分に明確であることを望む。任意のアドバイス。現在、ツールチップには何も表示されません!

答えて

1

ツールチップは独自のビジュアルツリーに存在するため、バインディングの評価時にはListBoxが見つかりません。

しかし、TextBlockのTagプロパティをListBoxにバインドし、ツールヒントの要素をToolTip自体のPlacementTargetにバインドすることができます。

<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> 

バインディングパスのPlacementTargetは、 "Name" TextBlockを参照しています。 このTextBlockのTagプロパティは、 "lbx1" ListBoxへの参照を返します。 これで、現在選択されているEdataオブジェクトのAsStringToolTipプロパティを取得できます。