SelectedItem的SelectedItem

时间:2011-08-03 12:17:40

标签: wpf data-binding listbox master-detail

首先,我要感谢您在本论坛中阅读的许多好帖子。不幸的是,我找不到任何有关我当前问题的帮助(无论是在这里还是其他任何地方)。

我正在尝试做的事情听起来很简单,但我不知道如何让它发挥作用...也许我仍然对wpf不熟悉或者我没有足够的东西:)

我正在为自动化制造中的零件设计前端:

  • 我有很多可放置托盘的地方(但也可以是空的)。
  • 每个托盘最多可放置3个可安装部件的地方
  • 一切都是动态创建的数据库,并对变化做出反应。
    • 托盘上零件的位置也来自数据库,应该可视化

我想要的是:

  • 托盘预览托盘的概述
  • 当我选择一个地方时,我想看一个地方的详细视图
  • 当我点击详细托盘托盘上的零件时,我想查看零件的详细信息

前两点很简单,效果很好:

  • 我为每个组件(部件,托盘,托盘位置)都有一个DataTemplate。实际上那些是作为Datatemplates导入的UserControl
  • 概述是一个ListBox,其中的地点为DataContext
  • for detail-place-view我使用UserControl并将其绑定到Listbox的SelectedItem

我尝试将Textblock的Text绑定到所选Part的ID ...并失败。

可能我可以在后面的代码中使用一些全局变量 - 但听起来非常难看。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

我有一个解决方案......它不是很好但是有效。

  • 我在托盘中创建了一个事件,当所选择的零件位置发生变化时触发
  • 我在托盘处理事件并创建一个新事件
  • 最后我在概述中处理它并相应地更改详细视图

最有可能有更好的解决方案,但它就足够了。

答案 1 :(得分:0)

也许尝试使用ElementName绑定?

<TextBlock Text="{Binding ElementName=Name_of_your_Listbox, Path=SelectedItem.ID" />

你可以发布一些TextBlock和Binding的代码吗?

答案 2 :(得分:0)

如果我使用ContentControl并将其内容绑定到SelectedItem,则上下文非常重要:

<ContentControl Content="{Binding SelectedItem, ElementName=mylistbox}">

我可以像这样绑定到DataTemplate中所选项目的ID:

<ContentControl.ContentTemplate>
    <DataTemplate>
        <TextBlock Text="{Binding ID}" />
    </DataTemplate>
</ContentControl.ContentTemplate>

这是因为设置Content的{​​{1}}也会自动设置DataContext,并且此绑定相对于ContentControl,因为没有源(DataContext,{ {1}},ElementName)已被指定。

我不知道你的RelativeSource如何处理上下文,如果Source没有受到影响,这样的绑定将不起作用。您需要直接绑定:

UserControl

这当然会破坏在UserControl本身绑定的目的。但除非你发布一些相关的代码,否则很难说出错了。

同时检查VisualStudio中的“输出”窗口,绑定错误将显示在那里,并可能提供有关错误的有用信息。