2010-06-21 46 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都會更新。

但是我對所有關於數據上下文的討論感到困惑。您發佈的示例中沒有任何對象具有數據上下文。

相關問題