将对象的值绑定到存储在列表中的组合框

时间:2014-02-12 13:12:26

标签: c# wpf binding

我想将存储在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");
        }
    }
}

谢谢!

1 个答案:

答案 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