父{Nature}

时间:2016-12-17 18:44:58

标签: wpf listview mvvm listbox datacontext

我是新手WPF。我需要实现以下内容:我有一个ModelView,其中包含类和#34; Edata"的Observable集合。 Edata还包含另一个ObservableColelction of Class" eParams"其中包含4个属性。

现在我有包含Edata列表的listbox,以及包含params的另一个listview。 一切都很好。挑战是工具提示。我在Edata Class Property中有一个名为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 个答案:

答案 0 :(得分:1)

由于Tooltip驻留在自己的可视树中,因此在评估绑定时无法找到ListBox。

但是您可以将TextBlock的Tag属性绑定到ListBox,然后将Tooltip中的元素绑定到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引用&#34; Name&#34; TextBlock的。 此TextBlock的Tag属性返回对&#34; lbx1&#34;的引用。列表框。 然后,您可以获取当前所选Edata对象的AsStringToolTip属性。