I'm trying to pass in an array of system:Object to my converter as a parameter: Xaml: Doesn't work
<TextBlock.Text>
<Binding ElementName="MainGrid" Path="DataContext" Converter="{StaticResource TestConverter}">
<Binding.ConverterParameter>
<x:Array Type="system:Object">
<Binding ElementName="MainGrid" Path="DataContext" />
<Binding ElementName="SomeOtherElement" Path="DataContext" />
</x:Array>
</Binding.ConverterParameter>
</Binding>
</TextBlock.Text>
Following XAML Does work, I found a sample online that used an array of Brush:
<TextBlock.Text>
<Binding ElementName="MainGrid" Path="DataContext" Converter="{StaticResource TestConverter}">
<Binding.ConverterParameter>
<x:Array Type="Brush">
<SolidColorBrush Color="LawnGreen"/>
<SolidColorBrush Color="LightSkyBlue"/>
<SolidColorBrush Color="LightCoral"/>
</x:Array>
</Binding.ConverterParameter>
</Binding>
</TextBlock.Text>
I get a System.Windows.Markup.XamlParseException: A 'Binding' cannot be used within a 'ArrayList' collection. A 'Binding' can only be set on a DepedencyProperty or a DependencyObject.
I've tried one of the suggested answers e.g. adding the ViewModel as a Dependency Object to my converter but that isn't working
public class TestConverter : DependencyObject , IValueConverter
{
public static readonly DependencyProperty PropertyTypeProperty = DependencyProperty.Register(
"PropertyType", typeof (DerivedRacingViewModel), typeof (TestConverter), new PropertyMetadata(default(DerivedRacingViewModel)));
public DerivedRacingViewModel PropertyType
{
get { return (DerivedRacingViewModel) GetValue(PropertyTypeProperty); }
set { SetValue(PropertyTypeProperty, value); }
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var x = parameter;
return "Test";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
var x = parameter;
var z = parameter;
throw new NotImplementedException();
}
}
Then changing my xaml to:
<converters:TestConverter x:Key="TestConverter" DerivedRacingViewModel="{Binding}" />
That give me compile time errors: 'DerivedRacingViewModel' was not found in type 'TestConverter'.
The reason behind doing this is I want to have 2 or 3 objects available when I'm doing my ConvertBack, e.g. I need the text that is entered into text box, the value that text box is bound to and the view model. This is where I'm having real difficulty. I've seen other people doing it by splitting strings and stuff but I really don't like that.