Telerik RadComboBoxを含むSilverlightページがあり、ComboBoxで選択されているアイテムに基づいて表示/非表示にする必要がある別の要素があります。私がやりたいのは、適切なアイテムが選択されていることを示すように、非表示の要素のVisibilityプロパティをバインドすることです。
これを行うために、非常に単純なValueConverterを作成し、RadComboBoxのSelectedItemをそのコンバーターにバインドして、選択されているアイテムを評価し、適切なVisibilityを返すようにしています。本当に簡単なものですが、なぜか今日はうまくいきません。多分カフェインが足りない...
問題は、ValueConverterが呼び出されたときに、渡される「値」がNULLになることです。
このページではCaliburn.MicroMVVMを使用していることにも言及する必要があります。それが違いを生むかどうかはわかりませんが、念のために考えました...
これがComboBoxXAMLです。
<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}}"
これが(汎用)コンバーターです。渡される値はまだNULLであるため、SelectedIndex値を読み取るようにまだ設定されていません。
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);
}
}