如何将WPF组合框绑定到XAML中的List <Objects>?

Joh*_*hnB 5 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;
}
Run Code Online (Sandbox Code Playgroud)

这是我的ComboBox的XAML定义:

ComboBox Name="cbTestAccountManagers"
          ItemsSource="{Binding AccountManagers}"
          DisplayMemberPath="UserName"
          SelectedValuePath="UserCode"
          Width="250"
Run Code Online (Sandbox Code Playgroud)

我不太确定自己在做什么错。我在运行/加载时没有任何错误。组合框显示,下拉菜单中没有任何内容。(它是空的)。

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

谢谢

小智 5

你的问题很简单。改变

public List<AccountManager> AccountManagers; 
Run Code Online (Sandbox Code Playgroud)

对此

public List<AccountManager> AccountManagers { get; set; }
Run Code Online (Sandbox Code Playgroud)

并确保您的 MainWindow 构造函数中有这些

public MainWindow()
{
    InitializeComponent();
    //Setup Account managers here
    DataContext = this;
}
Run Code Online (Sandbox Code Playgroud)

您只能绑定到属性而不是字段,并且您需要确保正确的数据上下文


Mik*_*keT 5

你犯了几个错误

首先你没有遵循MVVM

正确的 MVVM 应该如下所示

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

}
Run Code Online (Sandbox Code Playgroud)

那么不需要更改后面的代码,只需使用可以直接设置或通过绑定设置的 DataContext

<Window.DataContext>
    <local:AccountManagersVM />
</Window.DataContext>
ComboBox ItemsSource="{Binding AccountManagers}"
          DisplayMemberPath="UserName"
          SelectedValuePath="UserCode"
          Width="250"
Run Code Online (Sandbox Code Playgroud)

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

例如public long UserCode { get; set; }会起作用但public long UserCode; 不会