2016-12-17 2 views
0

Я новичок WPF. Мне нужно получить следующее: у меня есть ModelView, который содержит коллекцию Observable класса «Edata». Edata также содержит другое ObservableCollection класса «eParams», которое содержит 4 свойства.DataContext родителя

теперь у меня есть список, который содержит список Edata и другое listview, которое содержит параметры. Все прекрасно работает. задача - подсказка. У меня есть свойство класса Edata, называемое AsStringToolTip. Я использую это свойство, чтобы дать некоторый намек пользователю и проинформировать информацию о строке, в которой находится мышь.

<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 к ListBox, а затем привязать элемент в подсказке к теге PlacementTarget самой ToolTip. Это, вероятно, лучше объяснить с какой-то образец разметки:

<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 в связывающем пути относится к TextBlock «Name». Свойство Tag этого TextBlock возвращает ссылку на «Lbx1» ListBox. Затем вы можете получить свойство AsStringToolTip выбранного в настоящее время объекта Edata.