【问题标题】:Binding ComboBox Item with a text property of different DataContext将 ComboBox 项与不同 DataContext 的文本属性绑定
【发布时间】:2011-03-06 08:00:48
【问题描述】:

我有一个ComboBox,如下所示。我想要的是将SelectedItem 值绑定到DataContextText 属性,以便另一个DataTemplate 可以显示Image。请注意ComboBox 和目标Image 元素位于两个不同的DataTemplates 上,因此我需要在后端更新DataContextText 属性(ImageName)。

<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" />

【问题讨论】:

    标签: wpf data-binding binding combobox


    【解决方案1】:

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

    我不确定您要在 xaml 中设置哪个项目,我认为这是最后一行 &lt;Image Source="{Binding Path=Image' ... /&gt;

    您可以只为该控件指定数据上下文。

    针对 cme​​ts 进行编辑

    既然您试图从组合框中获取所选项目并尝试将其发送到图像,为什么不将其作为值传递给保存图像的类。

    我认为您可以在 xaml 中执行此操作,但我不完全确定如何执行此操作。

    【讨论】:

    • 在我的 DataContext 中有一个属性 ImageName(Text)。我想要的是用 ComboBoxItem 的名称(BC_OL 和 Indian_OL)更新该属性。我怎样才能更新它
    • 我的combobox是硬编码的,但我想在选择与seletcteditem.name值更改时更新Datacontext的属性之一。有人可以帮忙吗?或者我如何将一个元素(文本)与两个源绑定,一个是从 UI 元素(cobBox)获取值并更新后端属性。全部在 Xaml 中
    • 那么你需要将ImageName属性设置为ComboBox的名称,并且它们都绑定到同一个数据上下文?
    • ComboBox 没有绑定到任何东西,它有静态值。我需要的是当用户从组合框中选择图像时,我想将图像(文本)的名称传递给后端 DataContext 属性,以便它可以用于选择图像并将 BitmapIamge 元素发送到另一个 DataTemplate 元素。或者你可以说我需要将一个元素与两个不同的 DataContexts 绑定。一个用于获取值,另一个用于更新值。
    【解决方案2】:

    您似乎正在尝试执行以下操作:

    <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,并且当您在@ 中键入一个值时987654326@ 在ComboBox 的列表中,它会更改ComboBox 中的选定项目。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 2017-06-05
      • 1970-01-01
      相关资源
      最近更新 更多