我在将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>
答案 0 :(得分:1)
您需要设置一些属性而不仅仅是ItemsSource
典型的组合框通常看起来像 -
<ComboBox ItemsSource="{Binding ITEMS}"
DisplayMemberPath="PROPERTY_NAME"
SelectedItem="{Binding SELECTED_ITEM}"/>
显示成员会告诉应该使用哪个属性来显示组合框中的文本。
所选项目的名称将为您提供所选项目,以便您可以使用它。 (虽然所选项目与您的问题没有直接关系,但在大多数情况下您将使用它)
答案 1 :(得分:1)
尝试设置显示成员路径,如下所示;
<ComboBox ItemsSource="{Binding LogOnUserCollection}"
DisplayMemberPath="Username"/>