我有一个 Silverlight 页面,上面有一个 Telerik RadComboBox,我还有另一个元素,我需要根据在 ComboBox 中选择的项目来显示/隐藏。我想要做的是绑定隐藏元素的 Visibility 属性,以便它显示选择了适当的项目。
为了做到这一点,我创建了一个非常简单的 ValueConverter,并尝试将 RadComboBox 的 SelectedItem 绑定到该转换器,以便我可以评估选择了哪些项目,并返回适当的可见性。真的很简单,但由于某种原因,它今天不适合我。可能是咖啡因不够...
问题是,当调用 ValueConverter 时,传入的“值”为 NULL。
我还应该提到这个页面正在使用 Caliburn.Micro MVVM。不确定它是否有区别,但以防万一......
这是组合框 XAML:
<telerik:RadComboBox x:Name="RecordTypes" SelectedItem="{Binding Path=SelectedRecordType, Mode=TwoWay}" ItemsSource="{Binding Path=RecordTypes, Mode=TwoWay}" EmptyText="Select..." />
这是另一个元素上的绑定:
Visibility="{Binding Path=SelectedItem, ElementName=RecordTypes, Mode=TwoWay, Converter={StaticResource VisibilityConverter}}"
这是(通用)转换器。尚未设置读取 SelectedIndex 值,因为传入的值仍为 NULL:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
bool visibility = (bool)value; <-- THIS VALUE IS NULL AND SHOULD NOT BE, IT SHOULD BE THE SelectedItem value
return visibility ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
Visibility visibility = (Visibility)value;
return (visibility == Visibility.Visible);
}
}