Brian Var
Brian Var

Reputation: 6227

How to resolve a null binding on a ComboBox?

Overview: I've set a binding on a ComoboBox to a List property. But when I run the application there is no data populated in the combo box.

Debug steps:

My thoughts are that the list is being initialized after the setter is called. Meaning that the binding will be null at that stage the binding is called on the combo box.

Question:

How can I call the Init method for my list prior to the QueryList setter being called?

Code snippet:

Code behind -

    //The binding property for the combo box
    private List<string> _queryList;
    public List<string> QueryList
    {
        get
        {
            return this._queryList;
        }
        set
        {
            this._queryList = value;
        }

    }


    public MainWindow()
    {
        InitializeComponent();
        // Establish the Login control
        Ctrl = new CrmLogin();
        QueryList = new List<string>();
        InitQueryList();
    }

    //Call to init the list data
    private void InitQueryList()
    {
        _queryList.Add("Query queues with unapproved email routers");
        _queryList.Add("Query queues with emails in pending send status");
    }

Combobox binding setup -

 <ComboBox HorizontalAlignment="Left" ItemsSource="{Binding QueryList}" Grid.Column="1" x:Name="queryComboBox" Grid.Row="0" VerticalAlignment="Bottom" Width="300" Visibility="Collapsed" Text="Select a query"/>

Upvotes: 1

Views: 114

Answers (3)

user5447154
user5447154

Reputation:

You forget to set your DataContext :

public MainWindow()
{
        InitializeComponent();
         this.DataContext = this;
        // Establish the Login control
        Ctrl = new CrmLogin();
        QueryList = new List<string>();
        InitQueryList();
}

Upvotes: 1

Jerin
Jerin

Reputation: 4239

Firstly if you are using Code behind method MVC then you would need to update the datasource using

comboBox1.DataSource = QueryList;

Else if you are using the standard MVVM format then you would need to use

INotifyPropertyChanged

Else You will need to use

ObservableCollection

This happens because on initialization null value of your _querylist gets binded initially. Now when your querylist gets updated this doesnt get reflected in your view as View doesnt get any notification or event stating that a change has been made to the viewmodel(your binded item)

Upvotes: 0

Islam Kassimov
Islam Kassimov

Reputation: 23

Try this :

public MainWindow()
{
    // Establish the Login control
    QueryList = new List<string>();
    InitQueryList();
    InitializeComponent();
    Ctrl = new CrmLogin();
}

Upvotes: 0

Related Questions