0

Windows Phone 用の Silverlight ツールキットから、項目の ObservableCollection を ListPicker にバインドしようとしています。以前にこれを行ったことがありますが、私の場合、ObservableCollection にはカスタム クラスのアイテムが含まれています。クラスの各プロパティ (項目ごと) を取得して ListPicker にバインドする方法がわかりません。私が持っているものをよりよく説明するために、次のようにします。

MainPage.xaml

<Grid.Resources>
        <DataTemplate x:Name="SearchProviderItemTemplate">
            <StackPanel Orientation="Horizontal">
                <Image Source="{Binding Favicon}" />
                <TextBlock Text="{Binding Name}" Margin="12,0,0,0"/>
            </StackPanel>
        </DataTemplate>
        <DataTemplate x:Name="SearchProviderFullModeItemTemplate">
            <StackPanel Orientation="Horizontal">
                <Image Source="{Binding Favicon}" />
                <TextBlock Text="{Binding Name}" Margin="12,0,0,0"/>
            </StackPanel>
        </DataTemplate>
</Grid.Resources>

<toolkit:ListPicker x:Name="SearchProviderListPicker" ItemsSource="{Binding SearchProvider}" Margin="12,0,12,0" 
                            Header="Search provider" ItemTemplate="{Binding SearchProviderItemTemplate}"
                            FullModeHeader="Search provider" FullModeItemTemplate="{Binding SearchProviderFullModeItemTemplate}"
                            SelectedIndex="{Binding}"
                            SelectionChanged="SearchProviderListPicker_SelectionChanged" 
                            CacheMode="BitmapCache"/>

MainPage.xaml.cs

public MainPage()
    {
        InitializeComponent();

        //This data is placed here for convenience right now
        ListItem Bing = new ListItem { Favicon = "", Name = "Bing", Address = "http://www.bing.com/search?q=" };
        ListItem Google = new ListItem { Favicon = "", Name = "Google", Address = "http://www.google.com/search?q=" };
        ListItem Yahoo = new ListItem { Favicon = "", Name = "Yahoo", Address = "http://search.yahoo.com/search?p=" };
        ListItem Ask = new ListItem { Favicon = "", Name = "Ask", Address = "http://www.ask.com/web?q=" };
        ListItem Aol = new ListItem { Favicon = "", Name = "AOL", Address = "http://search.aol.com/search?q=" };

        Settings.SearchProvider.Value.Add(Bing);
        Settings.SearchProvider.Value.Add(Google);
        Settings.SearchProvider.Value.Add(Yahoo);
        Settings.SearchProvider.Value.Add(Ask);
        Settings.SearchProvider.Value.Add(Aol);

        // Set the data context of the SearchProviderListPicker control to the data
        DataContext = App.ViewModel;
    }

MainViewModel.cs

    public ObservableCollection<ListItem> SearchProvider { get; private set; }

    public MainViewModel()
    {
        SearchProvider = Settings.SearchProvider.Value;
    }  

上記の設定クラスはSearchProvider、分離ストレージに ObservableCollection を格納するために使用されます。

設定.cs

public static Setting<ObservableCollection<ListItem>> SearchProvider = new Setting<ObservableCollection<ListItem>>("SearchProvider", new ObservableCollection<ListItem>());

また、Setting クラスは、分離ストレージからデータを保存および取得します。また、カスタム ListItem クラスは、使用する必要があるプロパティを示しています。

ListItem.cs

public string Favicon
    {
        get;
        set;
    }

    public string Name
    {
        get;
        set;
    }

    public string Address
    {
        get;
        set;
    }

したがって、基本的に各SearchProviderObservableCollection アイテムには、Favicon, Name, and Address使用する必要がある が含まれており、 と のみをListPickerにバインドしたいFaviconと考えています。Nameしかし、私の問題は、ListPicker が 5 つの検索プロバイダーを提示することですが、それぞれのテキストにはProject1.Common.ListItem、ListItem クラスが Common フォルダー内のどこにあるかが示されています。これらをビューに正しくバインドしてはいけませんが、これを適切に達成する方法がわかりませんか?

4

2 に答える 2

0

バインディングが正しいことを意味するテキストとして「Project1.Common.ListItem」を取得しているが、テンプレートに問題がある場合。

最初の修正は上記のとおりです。テンプレートを参照する場合は、「Binding」ではなく「StaticResource」を使用する必要があります。

テンプレートにタイプミスなどがないか再確認してください。

私があなたなら、最初にSettingsクラスを使用せずに機能させようとします。それが役立つかどうかを確認してください

于 2012-09-20T21:25:14.860 に答える
0

ListPicker のテンプレートは、Grid.Resources で定義された静的リソースです。

したがって、ListPicker xaml コードを次のように変更する必要があります。

ItemTemplate="{Binding SearchProviderItemTemplate}"
FullModeItemTemplate="{Binding SearchProviderFullModeItemTemplate}"

上記の 2 つのプロパティを次のように置き換えます。

ItemTemplate="{StaticResource SearchProviderItemTemplate}"
FullModeItemTemplate="{StaticResource SearchProviderFullModeItemTemplate}"
于 2012-09-20T06:32:02.547 に答える