如何解决ComboBox上的空绑定?

时间:2016-03-04 12:45:09

标签: c# wpf binding combobox

概述: 我已经将ComoboBox上的绑定设置为List属性。但是当我运行应用程序时,组合框中没有填充数据。

调试步骤:

  • 我检查了输出窗口是否存在绑定错误,告诉我数据源可能为空。
  • 然后我在QueryList属性的setter上设置了一个断点。这表明列表计数为0.似乎在对属性调用setter之后执行对init的调用。

我的想法是在调用setter后初始化列表。这意味着在该阶段绑定将为null,在组合框上调用绑定。

问题:

如何在调用QueryList setter之前调用我的列表的Init方法?

代码段:

代码背后 -

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

3 个答案:

答案 0 :(得分:1)

您忘了设置DataContext:

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

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分:0)

首先,如果您使用的是代码隐藏方法MVC,那么您需要使用

更新数据源
comboBox1.DataSource = QueryList;

否则,如果您使用的是标准MVVM格式,则需要使用

  

INotifyPropertyChanged的

否则您需要使用

  

的ObservableCollection

这是因为在初始化时,_querylist的null值会被绑定。现在当你的查询列表得到更新时,这并没有反映在你的视图中,因为View没有得到任何通知或事件声明已经对viewmodel(你的绑定项目)进行了更改