2010-06-21 47 views
1

我有一个ComboBox,如下所示。我想要的是将SelectedItem值与DataContextText属性绑定,以便另一个DataTemplate可以显示Image。请注意,ComboBox和目标Image元素位于两个不同的DataTemplate s,因此这就是为什么我需要更新后端中的Text属性(ImageName)。使用不同DataContext的文本属性绑定组合框项目

<ComboBox x:Name="cboOverlay" Grid.Row="0" Grid.Column="1" SelectedIndex="0" > 
    <ComboBoxItem Name="BC_OL" IsSelected="True"> 
     <StackPanel Orientation="Horizontal"> 
      <Image Source="Images\BC_OL.jpg" Width="100" Height="25" Canvas.Top="0" Canvas.Left="0" /> 
     <TextBlock Width="100" VerticalAlignment="Center" TextAlignment="Center"><Bold>Image1</Bold></TextBlock> 
     </StackPanel> 
    </ComboBoxItem> 
    <ComboBoxItem Name="Indian_OL"> 
     <StackPanel Orientation="Horizontal"> 
      <Image Source="Images\Indian_OL.jpg" Width="100" Height="25" Canvas.Top="0" Canvas.Left="0" /> 
     <TextBlock Width="100" VerticalAlignment="Center" TextAlignment="Center"><Bold>Image2</Bold></TextBlock> 
    </StackPanel> 
    </ComboBoxItem> 
</ComboBox> 
<Image Source="{Binding Path=Image}" Width="81" Height="25" Canvas.Top="0" Canvas.Left="0" /> 

回答

0

您可以将每个项目设置为具有特定的数据上下文。

我不知道在你的XAML哪个项目你想设置,我认为这是最后一行 <Image Source="{Binding Path=Image' ... />

你只需指定该控件的数据上下文。

编辑在效应初探以评论

既然你想从组合框中选择的项目,并试图发送到图像,为什么不只是通过它作为一个值类那是保存图像。

我认为你可以在xaml中做到这一点,但我不完全确定如何做到这一点。

+0

在我的DataContext中有一个属性ImageName(文本)。我想要的是用ComboBoxItem(BC_OL&Indian_OL)的名称更新该属性。我如何更新 – Jhelumi786 2010-06-21 14:05:37

+0

我的组合框是硬编码的,但我想在选择更改SeletctedItem.Name值时更新DataContext的属性之一。任何人都可以帮助这样做吗?或者我如何将一个元素(Text)与两个源绑定,一个是从UI元素(cobBox)获取值并更新后端属性。 All in Xaml – Jhelumi786 2010-06-21 14:48:47

+0

因此,您需要将ImageName属性设置为ComboBox的名称,并且它们都绑定到相同的数据上下文? – msarchet 2010-06-21 14:53:27

0

好像你正在试图做这样的事情:

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib"> 
    <DockPanel> 
    <TextBox DockPanel.Dock="Top" x:Name="Source">x1</TextBox> 
    <ComboBox DockPanel.Dock="Top" x:Name="myComboBox" 
     SelectedValue="{Binding ElementName=Source, Path=Text, Mode=TwoWay}"> 
     <sys:String>1</sys:String> 
     <sys:String>22</sys:String> 
     <sys:String>333</sys:String> 
     <sys:String>4444</sys:String> 
    </ComboBox> 
    <TextBlock DockPanel.Dock="Top" 
     Text="{Binding ElementName=myComboBox, Mode=OneWay, Path=SelectedItem.Length}"/> 
    </DockPanel> 
</Page> 

ComboBox采用双向绑定绑定到TextBox的文字,所以当你选择从ComboBox一个项目它更新TextBox,并且当您在ComboBox的列表中的TextBox中键入值时,它将更改ComboBox中的所选项目。

TextBlock被绑定到ComboBox中所选项目的属性。每当选定项目发生变化时,无论是因为用户选择了新项目还是TextBox中的值发生更改,TextBlock都会更新。

但是我对所有关于数据上下文的讨论感到困惑。您发布的示例中没有任何对象具有数据上下文。

相关问题