【问题标题】:WP8 ListPicker BindWP8 ListPicker 绑定
【发布时间】:2013-08-18 17:43:45
【问题描述】:

当我通过项目源将我的数据绑定到我的ListPicker时:

C#:

var sightingTypes = SightingTypes.List;
sightingTypesPicker.ItemsSource = sightingTypes;

XML:

    <toolkit:ListPicker x:Name="sightingTypesPicker" ItemsSource="{Binding sightingTypes, ElementName=this}">
        <toolkit:ListPicker.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{Binding Name}" FontSize="{StaticResource PhoneFontSizeSmall}"/>
                </StackPanel>
            </DataTemplate>
        </toolkit:ListPicker.ItemTemplate>
    </toolkit:ListPicker>

我可以看到 ListPicker 中显示的名称,但是,当我单击 ListPicker 时,它会显示对象类型的列表,如下所示:

MyProject.Model.SightingType
MyProject.Model.SightingType
MyProject.Model.SightingType
MyProject.Model.SightingType
MyProject.Model.SightingType
MyProject.Model.SightingType

我该怎么做:

A:让Name属性在列表显示时显示

B:将ID属性绑定为Value但不显示

【问题讨论】:

  • 为什么要分配 ItemsSource 两次,一次在代码中,一次在 XAML 中?

标签: c# windows-phone-8 listpicker


【解决方案1】:

您需要分配FullModeItemTemplate 才能使用:

<toolkit:ListPicker x:Name="sightingTypesPicker" ItemsSource="{Binding sightingTypes, ElementName=this}">
    <toolkit:ListPicker.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding Name}" FontSize="{StaticResource PhoneFontSizeSmall}"/>
            </StackPanel>
        </DataTemplate>
    </toolkit:ListPicker.ItemTemplate>
    <toolkit:ListPicker.FullModeItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding Name}" FontSize="{StaticResource PhoneFontSizeSmall}"/>
                <TextBlock Text="{Binding SomeOtherProp}" FontSize="{StaticResource PhoneFontSizeSmall}"/>
            </StackPanel>
        </DataTemplate>
    </toolkit:ListPicker.FullModeItemTemplate>
</toolkit:ListPicker>

编辑:回答您的问题 B:您可以使用 SelectedItem DependencyProperty 获取所选对象的实例:

使用 MVVM 方法:

<toolkit:ListPicker x:Name="sightingTypesPicker" 
                    ItemsSource="{Binding SightingTypes}"
                    SelectedItem="{Binding SelectedSigntingType, Mode=TwoWay}">

使用代码隐藏方法:

sightingTypesPicker.SelectionChanged += (s, e) => {
    MessageBox.Show(((SightingType)e.AddedItems[0]).ID);
};

【讨论】:

  • 非常感谢新开发者。
猜你喜欢
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多