C# 当页面已经绑定到另一个类时,如何在PhoneApplicationPage.Resources上绑定DataTemplate?
我根据反馈对问题进行了编辑,以包含更多信息 在我的setingspage.xaml中C# 当页面已经绑定到另一个类时,如何在PhoneApplicationPage.Resources上绑定DataTemplate?,c#,xaml,data-binding,windows-phone-8,C#,Xaml,Data Binding,Windows Phone 8,我根据反馈对问题进行了编辑,以包含更多信息 在我的setingspage.xaml中 <toolkit:ListPicker x:Name="lpkCountry" ItemTemplate="{Binding Source={StaticResource lpkItemTemplate}}" FullModeItemTemplate="{Binding Source={StaticResource lpkFullItemTemplate}}" Header="your cou
<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" />
同样在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路径错误:“阿富汗”System.String(HashCode=-2039466552)上未找到“国家”属性。BindingExpression:Path='Country'DataItem='Afghanistan'(HashCode=-2039466552);目标元素是“System.Windows.Controls.TextBlock”(名称=“”);目标属性为“Text”(类型为“System.String”)
我知道目标元素和目标属性之间存在冲突,所以如何解决这个问题?一个明显的错误是
RelativeSource={relativesourceself}
。这意味着您尝试绑定到同一个对象,如TextBox或ListPicker。在这种情况下,运行时是绝对正确的:在“Microsoft.Phone.Controls.ListPicker”上找不到“lpkitemplate”属性。
如果您在App.xaml的
部分的某个地方定义数据模板,我想类似于Source={StaticResource lpkitemplate}
的东西会有所帮助
编辑:添加更多代码后。您的项源是一个字符串数组,因此在数据模板中应使用以下绑定:
<TextBox Text={Binding} />
谢谢您的回复。现在的问题是listpicker的文本属性绑定到类的公共属性,该属性是通过代码定义的。i、 e:
。如果我将数据模板放置在App.xaml中,那么正确的使用路径是什么?将数据模板放置在何处并不重要,因为它仅在运行时应用。您应该保持相同的路径,
我询问的原因是因为我得到了所有国家/地区列表的错误,例如System.Windows.Data错误:BindingExpression路径错误:“在'津巴布韦''System.String'(HashCode=993922277)上找不到country'属性。BindingExpression:Path='Country'DataItem='津巴布韦'(HashCode=993922277);目标元素是“System.Windows.Controls.TextBlock”(名称=“”);目标属性为“Text”(类型为“System.String”)。
您的错误表明系统无法在类型String
上找到Country
属性,这其实并不奇怪。看来你的装订安排有问题。如果字符串(“津巴布韦”)是运行时试图在其上搜索属性的对象,则应该能够编写如下绑定表达式:
。试试看它是否有效。一般来说,在没有看到所有代码的情况下修复绑定是很困难的,因此如果您仍然无法实现您想要的,请发布更多的代码。我已经编辑了我的问题。我理解它找不到的东西,这并不奇怪。这就是为什么我要问如何正确地找到它
public SettingsPage()
{
InitializeComponent();
this.lpkCountry.SelectionChanged += new SelectionChangedEventHandler(lpkCountry_SelectionChanged);
this.lpkCountry.ItemsSource = Country;
settings = new AppSettings();
this.DataContext = settings;
}
<TextBox Text={Binding} />