ComboBox MultiBinding如何绑定到SelectedItem的属性

How does ComboBox MultiBinding bind to SelectedItem's property

我正在为 ComboBox 使用 MultiBinding。我要绑定的参数之一是 SelectedItem's SelectedName。这里 SelectedNamestring 类型。

如果不是 MultiBinding,我有这个效果很好:

<ComboBox Background="{Binding SelectedItem.SelectedName, 
        RelativeSource={RelativeSource Self}, Converter={StaticResource MyConverter}}">

但是在 MultiBinding 中,当我尝试绑定到 SelectedItem.SelectedName 时,它报告

Unable to cast object of type 'MS.Internal.NamedObject' to type 'System.String'.

这是我的代码:

<ComboBox.Background>
    <MultiBinding Converter="{StaticResource MyMultiBindingConverter}">
        <Binding .../>
        <Binding RelativeSource="{RelativeSource Self}" Path="SelectedItem.SelectedName"/> //this line fails
    </MultiBinding>
</ComboBox.Background>

我怎样才能让它正确?谢谢。

更新信息:

ComboBox 没有默认值 SelectedItem。当我使用MyConverter时,如果我没有选择一个项目,Convert方法中的断点将不会被命中。在我选择一个项目后,断点被击中,这是我想要的行为。

然而,当我使用 MyMultiBindingConverter 时,情况完全相反 - 断点将在 UI 加载时命中,而在我选择一个项目后不会命中。

您应该检查您是否在 Convert 方法中得到 string

public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
    if (values.Length < 2)
        return Binding.DoNothing;

    string selectedName = values[1] as string;
    if (string.IsNullOrEmpty(selectedName))
        return Binding.DoNothing;:

    //...
}

您不能假设每次调用 Convert 方法时 SelectedItem.SelectedName 属性 returns 都是一个值。