2011-01-27 3 views
0

XAMLとWindows Phone 7のプログラミングを学んでいます。 私はWP7ピボットコントロール用のitemtemplateを作成しようとしています。私はリストボックスを含むテンプレートを作ることができました。コードビハインドでこのリストボックスにアクセスすることが可能なので、カスタムクラスのコレクションに基づいて埋め込むことができますか?基本的にどのように動作するかは、ピボットコントロールがあり、そのコントロール内の各アイテムはカテゴリです。追加される各カテゴリについて、そのカテゴリに属する​​アイテムのリストが存在する。そのピボットアイテムのリストにそのカテゴリのアイテムを設定できるようにする必要があります。itemtemplateにあるリストボックスを作成する方法

私はこれを達成するためのアイデアを探しましたが、データバインディングに関する多くの例がありますが、XAMLでのデータバインディングの仕組みについてはあまりよく知られていません。

データバインディングを使用する方法がありますか、何とかリストボックスへの参照を取得してアイテムを追加することはできますか? どのような助けがあれば大いに喜ぶでしょう!で結合を実行するので(あなたが結合することによりカテゴリーのリストを記入した場合、その後、あなたはバインディングがcomleted保証されているエントリポイントを持っていない)

1:

は、私は、件名にいくつかの配慮をしたあなたに

答えて

0

ありがとうございました遅延ファッション)。

2)ItemTemplateのコンテンツを扱うのは、DataTemplateのアプローチよりも扱いにくく、信頼性が低く、排他的な状況でのみ使用する必要があります。 LogicalTreeHelperクラスとVisualTreeHelperクラスが役に立ちます。

3)しかし、私はWPTの一般的な方法であるので、DataTemplatesに基づいてビューを構築することをお勧めします。あなたは本当にこのコードがかなり複雑だと思いますか?

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow"> 
<Window.Resources> 
    <DataTemplate x:Key="InnerItemDataTemplate"> 
     <TextBlock Text="{Binding Name}"/> 
    </DataTemplate> 

    <DataTemplate x:Key="CategoryDataTemplate"> 
     <StackPanel> 
      <ListView ItemsSource="{Binding InnerItems}" 
         ItemTemplate="{StaticResource InnerItemDataTemplate}"/> 
     </StackPanel> 
    </DataTemplate> 
</Window.Resources> 
<Grid> 
    <ListView ItemsSource="{Binding Categories}" 
       ItemTemplate="{StaticResource CategoryDataTemplate}"/> 
</Grid> 

public class Category 
{ 
    public IEnumerable<InnerItem> InnerList 
    { 
     get{/*...*/} 
    } 
} 

class InnerItem 
{ 
    public string Name 
    { 
     get{/*...*/} 
    } 
} 

public class SampleModel 
{ 
    public IEnumerable<Category> Categories 
    { 
     get {/*...*/} 
    } 
} 
0

新しい「Windows Phoneのピボットアプリケーション」を作成する場合、デフォルトのコードは、この例を示したが、複数のpivotitemsにリストボックスで同じアイテムを再利用します。

ここでは、サンプルコードが何をしているのか、どのように変更するかについて概説します。

MainPageのコンストラクタでは、DataContextがオブジェクト(App.ViewModel)に設定されています。

このLoadedのMainPageイベントは、App.ViewModelが入力されていることを確認します。

App.ViewModelは、MainViewModelのインスタンスです。

MainViewModelは、「項目」と呼ばれるObservableCollectionを含みます。それはPivotItemにidividual ListBoxにバインドされているこのです:

<controls:PivotItem Header="first"> 
    <ListBox ItemsSource="{Binding Items}"> 
     ... 
    </ListBox> 
</controls:PivotItem> 

リストボックスの中で、あなたは「アイテム」コレクションの内容を参照することができます。

ListBox/PivotItemごとに異なるコレクションを持つように調整する場合は、これを調整してMainViewModelに複数のコレクションを含めることができます。

HTH。

関連する問題