0

フィードバックに基づいてより多くの情報を含めるように質問を編集しました。

私の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" />

App.xaml ページに配置された次の XAML に ListPicker DataTemplate をバインドしようとしています。

<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 パス エラー: 'Country' プロパティが 'アフガニスタン' 'System.String' に見つかりません (HashCode=-2039466552)。BindingExpression: Path='Country' DataItem='アフガニスタン' (HashCode=-2039466552); ターゲット要素は 'System.Windows.Controls.TextBlock' (Name='') です。ターゲット プロパティは 'Text' (タイプ 'System.String') です。

ターゲット要素とターゲット プロパティの間に競合があることは理解していますが、これを修正するにはどうすればよいですか?

4

1 に答える 1

1

明らかな間違いの1つはRelativeSource={RelativeSource Self}です。これは、TextBoxやListPickerなどのまったく同じオブジェクトにバインドしようとすることを意味します。この場合、ランタイムは完全に正しいです。'lpkItemTemplate' property not found on 'Microsoft.Phone.Controls.ListPicker'

App.xamlのセクションのどこかにデータテンプレートを定義すると、次のようなSource={StaticResource lpkItemTemplate}ことが役立つと思います<Application.Resources>

編集:コードを追加した後。アイテムのソースは文字列の配列であるため、データテンプレートでは次のバインディングを使用する必要があります。

<TextBox Text={Binding} />
于 2013-02-07T13:52:08.913 に答える