У меня есть ситуация, когда я использую конвертер с несколькими значениями. Значения, переданные ему, сами преобразуются.Укажите тип цели для IValueConverter
<MenuItem>
<MenuItem.IsEnabled>
<MultiBinding Converter="{StaticResource BooleanAndConverter}">
<Binding Path="Prop1" Converter="{StaticResource Converter1}" />
<Binding Path="Prop2" Converter="{StaticResource Converter1}" />
</MultiBinding>
</MenuItem.IsEnabled>
</MenuItem
Конвертер1 содержит некоторую проверку ошибок, подтверждающую, что он вызывается с допустимым типом цели. Он генерирует исключение, если нет, поскольку это ошибка разработчика, и ситуация должна быть исправлена.
Проблема заключается в том, что при использовании Converter1 в этом контексте целевым типом является System.Object. Теперь BooleanAndConverter требует значений определенного типа (Boolean), поэтому как я могу получить этот тип, переданный в качестве целевого типа Converter1?
В соответствии с поручением здесь код BooleanAndConverter:
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
foreach (object value in values)
{
if (value.GetType() != typeof(bool))
{
throw new ArgumentException("BooleanAndConverter can only be used to convert booleans."); // developer error
}
}
if (targetType != typeof(bool))
{
throw new ArgumentException("BooleanAndConverter can only convert to a boolean."); // developer error
}
foreach (object value in values)
{
if ((bool)value == false)
{
return false;
}
}
return true;
}
Позвольте мне переформулировать вопрос, как кажется, есть некоторая путаница. Converter1 знает, какой тип он может конвертировать из и в. Он выдает исключение при вызове с неправильными типами. В этой ситуации целевой тип не задается и генерируется исключение. Как правильно определить targetType? Когда он не используется в ситуации с несколькими связями, всегда задается правильно в зависимости от того, что преобразуется.
Является ли это просто коробочный логическое значение? Вы посмотрели на него в отладчике, чтобы определить базовый тип переданного объекта? –
отправьте код для BooleanAndConverter, пожалуйста. –
@AbinMathew Я добавил функцию преобразования к вопросу. – denver