ComboBox MultiBinding如何绑定到SelectedItem的属性
How does ComboBox MultiBinding bind to SelectedItem's property
我正在为 ComboBox 使用 MultiBinding。我要绑定的参数之一是 SelectedItem's SelectedName
。这里 SelectedName
是 string
类型。
如果不是 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 都是一个值。
我正在为 ComboBox 使用 MultiBinding。我要绑定的参数之一是 SelectedItem's SelectedName
。这里 SelectedName
是 string
类型。
如果不是 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 都是一个值。