2017-02-23 132 views
1

我遇到了在XAML中绑定WPF组合框的问题。如何在XAML中将WPF组合框绑定到列表<Objects>?

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

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

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

这里是我的组合框的XAML定义:

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

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

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

谢谢

+0

一开始你应该有你的使用可观察到的集合,第二你不能绑定您在VM客户经理的属性列表属性只有 – MikeT

+0

MikeT:能否请您解释更详细一点?我不是很遵循“不能绑定属性,只有属性。” Thx – JohnB

+0

指向你在正确的方向所有绑定错误报告到输出窗口,他们不会导致休息 – MikeT

回答

0

你的问题很简单。 更改

public List<AccountManager> AccountManagers; 

这个

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

,并确保你在主窗口的构造函数有这些

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

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

+0

感谢NR:我没有在我的构造函数中设置我的DataContext。现在工作正常。 – JohnB

+0

我很高兴听到它! –

1

你犯了几个错误

首先你不遵循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; 不会