【问题标题】:WPF Binding TextBlock value to display SelectedItem in ComboBoxWPF 绑定 TextBlock 值以在 ComboBox 中显示 SelectedItem
【发布时间】:2020-02-03 10:13:44
【问题描述】:

我有一个 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 等。在这个阶段我只能访问整个对象。

我是否缺少一些有用的绑定?

【问题讨论】:

    标签: c# wpf mvvm data-binding combobox


    【解决方案1】:

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

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

    或者,因为 SelectedItem 绑定到您的视图模型中的 EnteredUserModel 属性:

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

    不需要设置UpdateSourceTrigger=PropertyChanged。它在单向绑定中无效。

    【讨论】:

    • 那么只有在使用 TwoWay 绑定时才需要 UpdateSourceTrigger=PropertyChanged?例如,如果我要更新名字中的值?这样它会在组合框中更新吗?
    • 是的,完全正确。即便如此,仅当您需要更改 UpdateSourceTrigger 的默认值时,几乎所有属性都是 PropertyChanged。您经常在 TextBox 的 Text 属性的绑定中看到它,该属性将 LostFocus 作为默认的 UpdateSourceTrigger。
    【解决方案2】:

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

    或者,您可以在 TextBox 中绑定到 EnteredUserModel.FirstName

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-01
      • 2015-06-28
      • 2010-10-24
      • 1970-01-01
      • 2020-01-24
      • 2013-09-19
      • 2017-11-09
      • 1970-01-01
      相关资源
      最近更新 更多