2016-03-04 2 views
1

Обзор: Я установил привязку к ComoboBox к свойству List. Но когда я запускаю приложение, в поле со списком нет данных.Как разрешить привязку null к ComboBox?

Debug шаги:

  • Я проверил окно вывода для ошибок, которые мне подсказывает, что источник данных может быть нулевым переплета.
  • Затем я устанавливаю точку останова на сеттер свойства QueryList. Это показывает, что подсчет списка равен 0. Кажется, вызов init выполняется после вызова setter на свойство.

Мои мысли, что список инициализируется после вызова сеттера. Имея в виду, что привязка будет нулевой на этом этапе, связывание вызывается в поле со списком.

Вопрос:

Как я могу вызвать метод Init для моего списка до начала сеттера QueryList называют?

Фрагмент кода: за

код -

//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 связывания установки -

<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"/> 
+0

Вы пытались вызвать InitializeComponent() в конце конструктора? – Breeze

+1

попробуйте использовать ObservableCollection вместо списка – Taterhead

ответ

1

Вы забываете установить DataContext:

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

Попробуйте это:

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

Я попытался переместить InitializeComponent(); вызовите в этом порядке. Но привязка по-прежнему остается пустой в поле со списком. –

1

Во-первых, если вы используете код позади метода MVC, то вам необходимо будет обновить источник данных с помощью

comboBox1.DataSource = QueryList; 

Else, если вы используете стандартный формат MVVM, то вам нужно будет использовать

INotifyPropertyChanged

Else Вам нужно будет использовать

ObservableCollection

Это происходит потому, что при инициализации сначала инициализируется нулевое значение вашего _querylist. Теперь, когда ваш querylist обновляется это не получает отражение в вашей точке зрения, как View не получает никакого уведомления или события, о том, что изменение было сделано в ViewModel (ваш переплетен пункт)

Смежные вопросы