Связывание элемента ComboBox с текстовым свойством другого DataContext - PullRequest
1 голос
/ 21 июня 2010

У меня есть ComboBox, как показано ниже. Я хочу связать значение SelectedItem со свойством Text для DataContext, чтобы другой DataTemplate мог показать Image. Обратите внимание, что элементы ComboBox и target 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" />

Ответы [ 2 ]

0 голосов
/ 21 июня 2010

Похоже, вы пытаетесь сделать что-то вроде этого:

<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, а при вводе значения в TextBox, который находится в списке ComboBox, изменяет выбранный элемент в ComboBox.

TextBlock привязан к свойству выбранного элемента в ComboBox. Всякий раз, когда выбранный элемент изменяется, из-за того, что пользователь выбрал новый или изменилось значение в TextBox, TextBlock обновляется.

Но меня смущают все ваши разговоры о контексте данных. Ни один из объектов в опубликованном вами примере не имеет контекстов данных.

0 голосов
/ 21 июня 2010

Вы можете установить для каждого элемента определенный контекст данных.

Я не уверен в вашем xaml, какой элемент вы пытаетесь установить, я думаю, что это последняя строка <Image Source="{Binding Path=Image' ... />

Вы можете просто указать контекст данных для этого элемента управления.

Редактировать В ответ на комментарии

Поскольку вы пытаетесь получить выбранный элемент из поля со списком и пытаетесь отправить его на изображение, почему бы просто не передать его в качестве значения в класс, содержащий изображение.

Я думаю, вы могли бы сделать это в xaml, но я не совсем уверен, как это сделать.

...