当页面已绑定到另一个类时,如何在PhoneApplicationPage.Resources上绑定DataTemplate?

时间:2013-02-07 10:56:09

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

我已根据反馈编辑了问题以包含更多信息。

在我的SettingsPage.xaml中,我有

   <toolkit:ListPicker x:Name="lpkCountry" 
ItemTemplate="{Binding Source={StaticResource lpkItemTemplate}}" 
FullModeItemTemplate="{Binding Source={StaticResource lpkFullItemTemplate}}" 
Header="your country" CacheMode="BitmapCache" 
HorizontalAlignment="Left" VerticalAlignment="Top" Width="280" Height="82" />

我正在尝试将ListPicker DataTemplate绑定到放置在App.xaml页面中的以下XAML

<Application.Resources>
    <DataTemplate x:Name="lpkItemTemplate">
        <TextBlock Text="{Binding Country}" />
    </DataTemplate>
    <DataTemplate x:Name="lpkFullItemTemplate">
        <TextBlock Margin="16 0 0 0" Text="{Binding Country}" />
    </DataTemplate>
 </Application.Resources>

SettingsPage.xaml.cs将Country定义为公共静态字符串数组:

namespace myspace
{
    public partial class SettingsPage : PhoneApplicationPage
    {
        public static String[] Country = {
                            "Afghanistan",
                            "Åland Islands",
                            "Albania",
                            "Algeria",
                            "American Samoa",
                            "Andorra",
                            "Angola"}
                            ......;

同样在SettingsPage.xaml.cs上,我已将datacontext定义为另一个对象。

    public SettingsPage()
    {
        InitializeComponent();
         this.lpkCountry.SelectionChanged += new  SelectionChangedEventHandler(lpkCountry_SelectionChanged);
        this.lpkCountry.ItemsSource = Country;
        settings = new AppSettings();
        this.DataContext = settings;
    }

但是在运行时,当我转到SettingsPage时,我收到很多此类错误

System.Windows.Data错误:BindingExpression路径错误:'Afghanistan''System.String'上找不到'Country'属性(HashCode = -2039466552)。 BindingExpression:Path ='Country'DataItem ='Afghanistan'(HashCode = -2039466552); target元素是'System.Windows.Controls.TextBlock'(Name =''); target属性是'Text'(类型'System.String')..

我知道目标元素和目标属性之间存在冲突,那么如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

一个明显的错误是RelativeSource={RelativeSource Self}。这意味着您尝试绑定到同一个对象,如TextBox或ListPicker。在这种情况下,运行时是完全正确的:'lpkItemTemplate' property not found on 'Microsoft.Phone.Controls.ListPicker'

如果您在Source={StaticResource lpkItemTemplate}部分的App.xaml中某处定义了数据模板,我想像<Application.Resources>这样的内容会有所帮助。

添加更多代码后,

编辑。您的items source是一个字符串数组,因此在数据模板中您应该使用以下绑定:

<TextBox Text={Binding} />