Pivotコントロールを使用した動的ページ

Windows 7/8の電話開発分野には初めてのこと...窓の電話機を使って大変楽しんでいます...しかし、学習曲線があり、知ることがたくさんあります。

それで、私がしようとしているのは、n個のピボットページを表示するデータ構造に動的にバインドされたページを作成することです。各ピボットページは、コンテンツを表示するために異なるXAMLを持ちます。

私はこのコードプロジェクトの記事を見ました( http ://www.codeproject.com/Articles/113152/Applying-Data-Templates-Dynamically-by-Type-in​​-WP7 )、それはリストボックスを使ってディスプレイを制御しますが、私は何ですか同じことをやっていることに興味がありますが、ピボットページがあります。

私は最高の例を学ぶ...ここでは、コントロールにデータをバインドするためのクラスは、私が好きだろう...

  public class ParkingLot : List
  {
    public ParkingLot() { }

   //this will be the pivot page title
    public string Lot { get; set; }

   //the list of cars will be displayed on the page
  }
  public class Car
  {
    public Car() { }

   //this will be the data that is displayed in the pivot page for each car
    public string Width { get; set; }
    public string Length { get; set; }
  }


  public class Library : List
  {
    public Library() { }

   //this will be the pivot page title
    public string Location { get; set; }

   //the list of books will be displayed on the page
  }
  public class Book
  {
    public Book() { }

   //this is the data that will be displayed for each book
    public string ISBN { get; set; }
    public string Title { get; set; }
  }

私はここにすべてのコードを投稿する方が良いかどうか分かりません...または、コードプロジェクトの記事をすべて見ていただければ、記事から変更したコードを投稿します...希望で誰かが私にこれを理解させるのを助けることができる:

xaml:

    

<!--LayoutRoot contains the root grid where all other page content is placed-->

    
        
        
    

    <!--TitlePanel contains the name of the application and page title-->
    
        
        
    

    <!--ContentPanel - place additional content here-->
    
        
            
            
        

        

        

            
                
                    
                
            


            
                
                    
                
            

        

    

ここにDataTemplateSelectorクラスがあります

public static class DataTemplateSelector
{

    public static DataTemplate GetTemplate(ViewModelBase param)
    {
        Type t = param.GetType();
        return App.Current.Resources[t.Name] as DataTemplate;
    }
}

ここに、動的コンテンツコントロールがあります:         パブリッククラスDynamicContentControl:ContentControl     {         保護されたオーバーライドvoid OnContentChanged(オブジェクトoldContent、オブジェクトnewContent)         {             base.OnContentChanged(oldContent、newContent);             this.ContentTemplate = mSator.Model.DataTemplateSelector.GetTemplate(ViewModelBaseとしてのnewContent);         }
    }

ここに最初のビューxamlがあります:


    

(2番目のビューxamlは最初のビューにすることができ、色を変更するだけです)

ここにFirstViewModelクラスがあります(記事から)

    public class FirstViewModel : SelectableViewModel
{
    public FirstViewModel()
    {
        DisplayName = "First";
        FirstProperty = "this is the first property";
    }


    private string firstProp;
    public string FirstProperty
    {
        get { return firstProp; }
        set
        {
            if (firstProp != value)
            {
                firstProp = value;
                RaisePropertyChanged("FirstProperty");
            }
        }
    }

}

ここにはSelectableView Modelクラスがあります

 public class SelectableViewModel : ViewModelBase
 {
    public SelectableViewModel()
    {
    }

    string dispName;
    public string DisplayName
    {
        get { return dispName; }

        set
        {
            if (dispName != value)
            {
                dispName = value;
                RaisePropertyChanged("DisplayName");
            }
        }
    }
}

メインビューのモデルクラスは次のとおりです。

    public class MainViewModel : ViewModelBase
{
    public string ApplicationTitle
    {
        get
        {
            return "Dynamic Data Templates";
        }
    }

    public string PageName
    {
        get
        {
            return "Main page";
        }
    }

    private List viewModels;
    public MainViewModel()
    {
        viewModels = new List();

        viewModels.Add(new FirstViewModel());
        viewModels.Add(new SecondViewModel());

        SelectedItem = viewModels[0];
    }

    public List Items
    {
        get
        {
            return viewModels;
        }
    }

    SelectableViewModel selItem;
    public SelectableViewModel SelectedItem
    {
        get { return selItem; }
        set 
        {
            if (selItem != value)
            {
                selItem = value;
                RaisePropertyChanged("SelectedItem");
            }
        }
    }
}

助けてくれてありがとう!

0
ru de

1 答え

あなたがまだ学んでいると言っているように、ピボットの数がn個あることが悪い考えである理由を説明しましょう。

  1. 1ページのコンテンツの量によって、パフォーマンスの問題が発生する可能性があります。リストを使用すると、アイテムを仮想化できます。 Pivotコントロールは、動的に追加されたPivotItemの仮想化をサポートしていません。

  2. PivotItemがたくさんある場合、希望のアイテムにすばやくアクセスする方法がないため、目的のアイテムにナビゲートすることは難しいです。ピボットの中に30個のアイテムがありましたが、15番目のアイテムに移動したいとします。それはたくさんのスワイプを必要とし、それをすばやく行うのであれば、望んでいたものを通過するのは簡単でしょう。

ピボットコントロールは、次の2つの目的のいずれかで使用することを意図しています。

  1. 一連のデータのさまざまなビューを表示する。 eメールアプリケーションは、「すべて」、「未読」、「フラグが設定されている」、「緊急」のためにフィルタリングされた、各PivotItemのメールボックスの異なるビューを表示します。

  2. 関連するデータのさまざまな部分を表示します。すなわち、個々の連絡先/人物を見るときには、「プロフィール」、「新しいもの」、「写真」および「履歴」など、異なる関連するアクションおよび情報を異なるPivotItemsに分類して表示する。

n個のテンプレートリストのコレクションなど、膨大な量のコンテンツのコンテナとしてPivotコントロールを使用することは意図していません。
パフォーマンスとユーザビリティの問題を避けるため、ピボット内のアイテムの最大数は7にすることをお勧めします。

全体として、意図されたいずれかの方法でPivotコントロールを使用しないと、開発者としてのパフォーマンスの問題や、アプリを使用するユーザーのユーザビリティの問題が発生する可能性があります。
どちらも回避すべきシナリオです。

申し訳ありませんが、これはあなたの質問への直接の回答ではありませんが、うまくいけば、より良いアプリ(またはアプリ)を開発するのに役立ちます。 ;)

1
追加された
@ user3174075コメントに改行を入れることはできません
追加された 著者 Matt Lacey,
マット - 返信と情報をありがとう。実際には "n"の数字ではありません。一定数のページがありますが、コードを動的にしてコード内のページの内容を変更できるようにしたいと考えていましたが、XAMLの各ページのレイアウトを静的。
追加された 著者 user3174075,
(新しい段落を作るためにこの行にラインリターンをどのように置くのですか?私が入力するたびに...それは私の編集を保存します)
追加された 著者 user3174075,
マット - ちょっと吸ってるよ...そうじゃない?あなたの考えをありがとう。
追加された 著者 user3174075,