我已根据反馈编辑了问题以包含更多信息。
在我的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')..
我知道目标元素和目标属性之间存在冲突,那么如何解决这个问题?
答案 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} />