如何绑定Contact类的属性?

时间:2014-02-08 06:16:03

标签: c# xaml data-binding windows-phone contacts

我有一个类,其名称为“ContactInfo”,类型为Microsoft.Phone.UserData.Contact。 我从手机上读取了联系人,并为每个联系人创建了我的类的对象并设置了ContactInfo属性。所有对象都被添加到一个显示在LongListSelector中的ObservableCollection。

在C#中,我可以从ObservableCollection的数据源中读取元素,并从每个对象的ContactInfo属性中读取属性,但在XAML中,数据模板无法访问属性。

我知道LongListSelector的数据源设置正确,因为删除了数据模板,它显示了object.toString()但是没有显示数据模板,并且在VS的输出选项卡中我收到消息 “System.Windows.Data错误:BindingExpression路径错误:'ContactInfo'上找不到'DisplayName'属性

我忘了什么或者有什么设置不正确吗?

这是我的模特:

public class CDContact
{
    public Contact ContactInfo { get; set; }

    public ObservableCollection<CDPhoneNumber> PhoneNumbers{get; set;}

    public CDContact()
    {
        PhoneNumbers = new ObservableCollection<CDPhoneNumber>();
    }
}

这是数据模板:

<DataTemplate x:Key="ContactItemTemplate">
    <StackPanel VerticalAlignment="Top" DataContext="ContactInfo" >
            <TextBlock FontWeight="Bold" Text="{Binding Path=DisplayName, Mode=OneWay}" />
    </StackPanel>
</DataTemplate>

2 个答案:

答案 0 :(得分:1)

假设其他一切设置正确,这应该可行:

<DataTemplate x:Key="ContactItemTemplate">
    <StackPanel VerticalAlignment="Top" >
        <TextBlock FontWeight="Bold" Text="{Binding Path=ContactInfo.DisplayName, Mode=OneWay}" />
    </StackPanel>
</DataTemplate>

答案 1 :(得分:1)

这部分似乎错了:

<StackPanel VerticalAlignment="Top" DataContext="ContactInfo" >

请尝试这种方式:

<StackPanel VerticalAlignment="Top" DataContext="{Binding ContactInfo}" >