1

I could not set a combobox's ItemsSource to an Array. I have tried setting the DataContext to the class where the Array is found, and then setting the bindings in XAML

 class Car
{
    public string[] makes;
}

...

public MainWindow()
{
    Car _Car = new Car();
    _Car.makes = new string[]
        {
            "Toyota",
            "Mitsubishi",
            "Audi",
            "BMW"           
        };

    this.DataContext = _Car;
}

and then in XAML

<ComboBox Name="cars" Grid.Column="0" 
              Grid.Row="0" Margin="5" 
              ItemsSource="{Binding Path=makes}"/>

It doesn't seem to do anything. My cars combobox won't have any items.

I've also tried explicitly assigning

cars.ItemsSource= new string[]{
                "Toyota",
                "Mitsubishi",
                "Audi",
                "BMW"           
            };

But then I get this error message:

Exception has been thrown by the target of an invocation.

Is there anything I missed?

0

2 Answers 2

7

WPF binding doesn't support fields. Make it a property that has a getter and setter

class Car
{
    public string[] makes { get; set; }
}

Regardless, you do not have to explicitly state Path, so this should suffice

<ComboBox Name="cars" Grid.Column="0" 
          Grid.Row="0" Margin="5" 
          ItemsSource="{Binding makes}"/>
Sign up to request clarification or add additional context in comments.

4 Comments

wow. it worked, thanks!.. but how could it be, when 'makes' has already been set to 'public', which in my understanding is already accessible by other functions?
@CarlNathanMier It is accessible, but this is not enough. WPF binding works on the PropertyDescriptor model which requires a property. you can read more about it here
Thanks, but would you also know why assigning 'cars.ItemsSource= new string[]{ "Toyota", "Mitsubishi", "Audi", "BMW" };' returns the exception? thanks
@CarlNathanMier My guess would be that you might set the ItemsSource twice, in the xaml ItemsSource="{Binding makes}" and in the code-behind, but you should look into the inner exception to get more details ...
3

In Order for data binding to work correctly, you need a 'Property' to bind to.

XAML

<ComboBox Name="cars" Grid.Column="0" 
          Grid.Row="0" Margin="5" 
          ItemsSource="{Binding makes}"/>

Code

class Car
{
    public string[] makes { get; set; }
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.