如何将整个对象绑定到C#/WPF/XAML中ComboBox列表控件的控件,而不仅仅是属性?

3

我有这段 xaml 代码:

    <ComboBox Height="23" HorizontalAlignment="Left" Margin="598,0,0,16" x:Name="comboBoxActivityRecordingOrder" VerticalAlignment="Bottom" Width="248" SelectedItem="{Binding SelectedItem.t.activityrecordingorder, ElementName=listViewTasks, UpdateSourceTrigger=PropertyChanged}" SelectionChanged="comboBoxActivityRecordingOrder_SelectionChanged">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <Grid Height="23" Width="Auto" ShowGridLines="False">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="50"/>
                        <ColumnDefinition Width="50"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>

                    <!-- multi column combo box http://stackoverflow.com/questions/23893348/wpf-multicolumn-combobox -->
                    <TextBlock Grid.Column="0" Text="{Binding activityrecordingordertype.code, UpdateSourceTrigger=PropertyChanged}" />
                    <TextBlock Grid.Column="1" Text="{Binding banumber, UpdateSourceTrigger=PropertyChanged}" />
                    <TextBlock Grid.Column="2" Text="{Binding ***, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ActivityRecordingOrderConverter}}" />
                </Grid>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>

在第三列中,我需要显示一个字符串,我可以使用ActivityRecordingOrderConverter从整个对象生成该字符串。我应该在***处放置什么以将整个对象传递给转换器?我尝试过“this”,“self”,什么都不放。但是都不起作用。

1
不需要任何东西,只需将Path=.留空即可。请注意,您所有的UpdateSourceTrigger=PropertyChanged设置都是无意义的,它们没有任何效果。 - undefined
是的,我在其他地方找到了{Binding}语法。然而,如果你想在逗号后面添加内容,这种语法是不起作用的。所以编译器会抱怨{Binding, Converter... 但是Path=.可以工作。谢谢 - undefined
所以不要写逗号:{Binding Converter=...} - undefined
1个回答

9

要直接绑定到绑定源,您可以简单地省略路径。为了更明确,您可以指定空字符串或一个单点(.)。在属性路径语法中,一个孤立的.是一个特殊字符,表示“当前对象”。

{Binding Path=''}
{Binding Path=.}
{Binding Converter={...}}

还有一个很重要的“特殊”路径字符:使用/告诉绑定引擎在前面的集合中钻取到当前项,其中当前项是由集合的默认ICollectionView指定的项。当单独使用时,前面的集合将仅为绑定源本身。

示例:

<ListBox ItemsSource="{Binding Items}"
         IsSynchronizedWithCurrentItem="True" />

<TextBlock Text="{Binding Items/Name}" />

这里,绑定到Items/Name告诉绑定引擎:"将绑定到Items中当前选定项的Name。将IsSynchronizedWithCurrentItem设置为true告诉ListBox在集合视图中与所选列表框项同步选择的项目。最终结果是文本块显示列表中所选项目的属性。


谢谢!对于UWP{x:Bind Converter={...}}对我来说很有效。 - undefined
在UWP项目中进行了测试,现在似乎只有{x:Bind Path=''}起作用。不过编辑器会报错。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接