【问题标题】:DataContext of parent父数据上下文
【发布时间】:2016-12-17 18:44:58
【问题描述】:

我是 WPF 新手。我需要实现以下目标:我有一个 ModelView,其中包含类“Edata”的 Observable 集合。 Edata 还包含另一个 ObservableColelction 类“eParams”,其中包含 4 个属性。

现在我有一个包含 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>

我希望我足够清楚。任何建议。目前工具提示什么都没有显示!!!

【问题讨论】:

    标签: wpf listview mvvm listbox datacontext


    【解决方案1】:

    由于工具提示位于其自己的可视化树中,因此在评估绑定时无法找到 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 指的是“名称”TextBlock。 此 TextBlock 的 Tag 属性返回对“lbx1”列表框的引用。 然后可以获取当前选中的 Edata 对象的 AsStringToolTip 属性。

    【讨论】:

      猜你喜欢
      • 2014-12-02
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-08
      • 2013-04-08
      • 1970-01-01
      相关资源
      最近更新 更多