无法将ComboBox绑定到ObservableCollection<>

时间:2016-05-05 09:57:01

标签: c# wpf binding combobox

我在将ObserveableCollection绑定到组合框时遇到了一些问题。 为了给出一些观点,我有一个类似的课程:

class LogOnUser
{
    #region Members
    string _UserName;
    string _Password;
    #endregion

    #region Construction
    public LogOnUser(string username)
    {
        _UserName = username;
    }

    public LogOnUser(string username, string password)
    {
        _UserName = username;
        _Password = password;
    }
    #endregion

    #region Properties
    public string Username
    {
        get { return _UserName; }
        set { _UserName = value; }
    }

    public string Password
    {
        get { return _Password; }
        set { _Password = value; }
    }
    #endregion
}

然后我有另一个在ObserveableCollection中使用LogOnUser的类:

class LogOnUserCollection: ObservableCollection<LogOnUser>
{
    public LogOnUserCollection() : base()
    {
        Add(new LogOnUser("User1", "password"));
        Add(new LogOnUser("User2", "password"));
    }
}

我在一个名为LogOnUsers的ViewModel中有一个LogOnUserCollection实例,我将其绑定到我视图中组合框的ItemsSource。但是我只想显示我的集合的Username属性,所以它会有“User1”和“User2”作为它的项目,但实际发生的是我的ComboBox只是显示“LogOnUsers.LogOnUser”作为它的两件事。 有人能告诉我我做错了什么吗?

更新绑定xaml代码

<UserControl x:Class="MVVM.View"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:MVVM"
         mc:Ignorable="d">

    <UserControl.DataContext>
        <local:PasswordEntryViewModel/>
    </UserControl.DataContext>

    <UserControl.Resources>
        <local:LogOnUserCollection x:Key="LogOnUserCollection"/>
    </UserControl.Resources>

    <Grid>
        <ComboBox ItemsSource="{Binding LogOnUserCollection}"/>
    </Grid>
</UserControl>

2 个答案:

答案 0 :(得分:1)

您需要设置一些属性而不仅仅是ItemsSource

典型的组合框通常看起来像 -

<ComboBox ItemsSource="{Binding ITEMS}"
              DisplayMemberPath="PROPERTY_NAME"
              SelectedItem="{Binding SELECTED_ITEM}"/>

显示成员会告诉应该使用哪个属性来显示组合框中的文本。

所选项目的名称将为您提供所选项目,以便您可以使用它。 (虽然所选项目与您的问题没有直接关系,但在大多数情况下您将使用它)

答案 1 :(得分:1)

尝试设置显示成员路径,如下所示;

<ComboBox ItemsSource="{Binding LogOnUserCollection}"
      DisplayMemberPath="Username"/>