WPF 绑定 TextBlock 值以在 ComboBox 中显示 SelectedItem

WPF Binding TextBlock value to display SelectedItem in ComboBox

我有一个 ComboBox 和几个 TextBlock 字段。

我想在 Textblock's 上显示 ComboBoxSelectedItem 的属性。 Image

因此,当我选择多个用户之一时,TextBlock 中的属性将更新为 SelectedItem 中的属性。我找到了一个 example,虽然它使用的是 silverlight,但不能完全工作。

        <ComboBox Grid.Row="0"
                  Grid.Column="0"
                  VerticalAlignment="Bottom"
                  VerticalContentAlignment="Center"
                  HorizontalContentAlignment="Left"
                  Margin="0"
                  Height="40"
                  Name="ComboBox" 
                  ItemsSource="{Binding UserModels}" 
                  SelectedItem="{Binding EnteredUserModel, Mode=TwoWay}">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding FirstName}"
                               Style="{StaticResource ResourceKey=ComboBoxItemTextBlock}"/>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>
    </Grid>


        <TextBlock Grid.Row="1"
                   Grid.Column="0"
                   Margin="0 10 0 10" >
            <Run Text="{DynamicResource firstName}" />
            <Run Text=": " />
            <Run Text="{Binding ElementName=ComboBox, Path=SelectedItem, UpdateSourceTrigger=PropertyChanged}" />
        </TextBlock>

这是我试过的。我将 Name 添加到 ComboBox 以便我可以在我的 TextBlock 中访问它的 SelectedItem。我需要获取 SelectedItem.firstname,等等。在这个阶段我只能访问整个对象。

我是否遗漏了一些有用的绑定?

为了显示SelectedItem的FirstName 属性,只需使用合适的属性路径,即SelectedItem.FirstName:

<Run Text="{Binding ElementName=ComboBox, Path=SelectedItem.FirstName}" />

或者,由于 SelectedItem 绑定到视图模型中的 EnteredUserModel 属性:

<Run Text="{Binding Path=EnteredUserModel.FirstName}" />

不需要设置UpdateSourceTrigger=PropertyChanged。它对单向绑定没有影响。

您将获得 EnteredUserModel-Object,因为它是 ComboBox 的选定项目。如果您想要显示的文本,您必须绑定到 FirstName-属性。

或者您可以在 TextBox

中绑定到 EnteredUserModel.FirstName