ListPicker显示对象名称而不是属性

ane*_*afr 1 data-binding windows-phone-7 listpicker

在我的模型中,我有课:

public class Heaviness
{
    public int ID {get; set;}
    public string NameToDisplay {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

在我的视图模型中,我有一个属性HeavinessList:

public ObservableCollection<Heaviness> HeavinessList {get;set;}
Run Code Online (Sandbox Code Playgroud)

在我的xaml中,我添加了ListPicker,项目源绑定到HeavinessList; item的数据模板绑定到Heaviness对象的NameToDisplay属性.

<StackPanel x:Name="HeavinessGroup" Width="220" HorizontalAlignment="Left">
    <TextBlock x:Name="HeavinesLabel" Margin="12,0,0,0" TextWrapping="Wrap" 
               Text="Heaviness:" HorizontalAlignment="Left"/>
    <toolkit:ListPicker x:Name="HeavinessListPicker" 
                        SelectedIndex="0"
                        ItemsSource="{Binding HeavinessList}"
                        VerticalAlignment="Center">
        <DataTemplate>
            <TextBlock Text="{Binding NameToDisplay}" />
        </DataTemplate>
    </toolkit:ListPicker>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

但是,当我运行应用程序时,我显示的是对象名称,而不是属性.为什么会这样?

nem*_*esv 6

您需要将您DataTemplateItemTemplate财产分配给该财产,而不是直接将其放入ListPicker:

<toolkit:ListPicker x:Name="HeavinessListPicker" 
                        SelectedIndex="0"
                        ItemsSource="{Binding HeavinessList}"
                        VerticalAlignment="Center">
    <toolkit:ListPicker.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding NameToDisplay}" />
        </DataTemplate>
    </toolkit:ListPicker.ItemTemplate>
</toolkit:ListPicker>
Run Code Online (Sandbox Code Playgroud)

您可以在MSDN上阅读有关DataTemplates的更多信息(该文章是关于WPF的,但相同的概念适用于WP7)