在绑定中使用绑定

时间:2013-11-18 14:30:41

标签: c# wpf binding

之前很可能已经提出并回答了这个问题,但我真的不确定如何说出这个问题。

我有一个字典(MyLookup),我希望控件绑定到字典中的特定键和值。字典的关键是一个字符串,让我们说特定的项目是'MyItem'。输出应该是这样的:

MyItem value: 43

一个想法是使用几个文本块和一个粘贴面板,一个用于键,一个用于值。我试图将感兴趣的项封装在堆栈面板中,但是在为第二个文本块定义绑定路径时,事情会变得有果实。

<StackPanel Orientation="Horizontal" Tag="MyItem">
  <TextBlock Text ="{Binding Path=Tag, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type StackPanel}}, StringFormat={0} value:}"/>
  <TextBlock Text ="{Binding Path=MyLookup[{Binding Path=Tag, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type StackPanel}}]}"/>
</StackPanel>

也可以使用单个文本块和一些字符串格式化吗?

<TextBlock Text="{Binding Path=MyLookup[MyItem], StringFormat={0} value: {1}}"/>

Bleugh,这一切都在那里因为需要有2个输出而崩溃了?!我目前的想法是使用一个多转换器来获取字符串并将其转换为字符串和int,但我想知道你是否狡猾我缺少的东西。

2 个答案:

答案 0 :(得分:2)

再一次, A Binding只能在DependencyProperty DependencyObject上设置。您尝试使用Binding作为整数,指定从Dictionary查看哪个键/值,但您不能,因为它是整数而不是DependencyProperty

您应该创建一个包含视图所需的所有数据和功能的视图模型,而不是这样做。正如@HighCore所提到的,一旦你以正确的方式组织数据,那么所有这些讨厌的问题都将消失。

答案 1 :(得分:0)

嗯,h ** k是{Binding Path=MyLookup[{Binding Path=Tag, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type StackPanel}}]}

看一下ObjectDataProvider。

那个糟糕的屁股可以让你做出你能想到的最疯狂的绑定以及XAML中发生的所有事情。

http://msdn.microsoft.com/en-us/library/system.windows.data.objectdataprovider%28v=vs.110%29.aspx