我想将存储在ObersvableCollection中的每个对象的值绑定到ComboBox。不幸的是它没有用。
<ComboBox Grid.Column="1" Margin="0,0,0,5" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" FontSize="15" ItemsSource="{Binding Path=UserAccounts}" >
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding EMailAddress}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
在后面的代码中我设置了DataContext:
this.DataContext = PersitentDataModelUserSettings.Instace.UserAccounts;
以下是模型:
public class PersitentDataModelUserSettings : ModelBase
{
private static PersitentDataModelUserSettings instance = new PersitentDataModelUserSettings();
public static PersitentDataModelUserSettings Instance
{
get { return instance; }
set { instance = value; }
}
private ObservableCollection<AccountSettingsObj> _userAccounts = new ObservableCollection<AccountSettingsObj>();
public ObservableCollection<AccountSettingsObj> UserAccounts
{
get { return _userAccounts; }
set
{
_userAccounts = value;
OnPropertyChanged("UserAccounts");
}
}
}
这是对象类型:
[XmlRoot]
public class AccountSettingsObj : ModelBase
{
public string FirstName { get; set; }
public string LastName { get; set; }
private string _eMailAddress;
public string EMailAddress
{
get { return _eMailAddress; }
set
{
_eMailAddress = value;
OnPropertyChanged("EMailAddress");
}
}
}
谢谢!
答案 0 :(得分:1)
您正在将comboBox的ItemSource设置为:
ItemsSource="{Binding Path=UserAccounts}"
但你也将ComboBox的DataContext设置为:
this.DataContext = PersitentDataModelUserSettings.Instace.UserAccounts;
所以绑定引擎正在UserAccounts
中寻找属性UserAccounts
。
这可以通过两种方式解决:
将ItemsSource设置为绑定,如下所示:ItemsSource="{Binding}"
。这样您就可以说ItemSource
与ComboBox的DataContext
相同。
或者将DataContext设置为仅实例:this.DataContext = PersitentDataModelUserSettings.Instace.UserAccounts;
。
这样,您可以将 DataContext 设置为指向 PersitentDataModelUserSettings 的实例,并要求BindingEngine在 PersitentDataModelUserSettings 中查找属性 UserAccounts 。