如何将WPF ComboBox绑定到XAML中的List <objects>?

时间:2017-02-23 17:26:10

标签: c# wpf xaml combobox

我遇到了在XAML中绑定WPF ComboBox的问题。

这是我的对象定义和集合:

public class AccountManager
{
   public long UserCode { get; set; }
   public string UserName { get; set; }
}

public partial class MainWindow : Window
{    
   public List<AccountManager> AccountManagers;
}

以下是我的ComboBox的XAML定义:

ComboBox Name="cbTestAccountManagers"
          ItemsSource="{Binding AccountManagers}"
          DisplayMemberPath="UserName"
          SelectedValuePath="UserCode"
          Width="250"

我不太确定我在这里做错了什么。 我没有在运行/加载时遇到任何错误。 ComboBox在下拉列表中显示没有任何内容。 (它是空的)。

有人能指出我正确的方向吗?

由于

2 个答案:

答案 0 :(得分:3)

你犯了几个错误

首先,你没有关注MVVM

正确的MVVM应如下所示

public class AccountManager
{
   public long UserCode { get; set; }
   public string UserName { get; set; }
}
public class AccountManagersVM
{
   public ObservableCollection<AccountManager> AccountManagers{ get; set; }

}

然后不需要更改你背后的代码只需要使用可以直接设置或通过绑定设置的DataContext

<Window.DataContext>
    <local:AccountManagersVM />
</Window.DataContext>
ComboBox ItemsSource="{Binding AccountManagers}"
          DisplayMemberPath="UserName"
          SelectedValuePath="UserCode"
          Width="250"

第二个属性/字段不能只绑定属性

例如public long UserCode { get; set; }可以使用public long UserCode; 不会

答案 1 :(得分:2)

Your problem is simple. Change

public List<AccountManager> AccountManagers; 

to this

public List<AccountManager> AccountManagers { get; set; }

and make sure that you have these in your MainWindow constructor

public MainWindow()
{
    InitializeComponent();
    //Setup Account managers here
    DataContext = this;
}

you can only bind to properties not fields and you need to ensure the proper data context