Я пытаюсь изучить MultiBinding
. Я пытаюсь передать два значения (один double
и один boolean
) от viewmodel до конвертера и вернуть результат string
.Невозможно лить объект в WPF MultiValueConverter
XAML
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource MyValueConverter}">
<Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=ScrollViewer}" Path="DataContext.SelectedCar.PowerValue" />
<Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=ScrollViewer}" Path="DataContext.SelectedCar.IsPowerAvailable" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Преобразователь
class MyValueConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (System.Convert.ToBoolean(values[1]))
{
return string.Format("{0:n1}", values[0]);
}
else
{
return "[not available]";
}
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
ViewModel
public double PowerValue
public bool IsPowerAvailable
В преобразователе я получаю исключение Unable to cast object of type 'MS.Internal.NamedObject' to type 'System.IConvertible
.
Что это значит? Я неправильно использовал MultiBinding
?
EDIT:
ViewModel выглядит следующим образом
class CarViewModel : ViewModelBase
{
private car _selectedCar;
public car SelectedCar
{
get { return _selectedCar; }
set
{
_selectedCar = value;
}
}
Модель выглядит следующим образом:
class car
{
public double PowerValue { get; set; }
public bool IsPowerAvailable{ get; set; }
}
Вы могли бы найти некоторые подсказки в этой подобной теме: http://stackoverflow.com/questions/18866308/unable -to-cast-object-of-type-ms-internal-namedobject-to-bitmapimage – SnowballTwo
Почему вы используете relativeSource? Есть ли у вас разные datacontexts? –
Нет, у меня только один файл данных. Я попробовал немало альтернатив, также без RelativeSource, но они не работали ни – Nuts