2

ノート

私は新人です。私は単純な考えやばかげた考えに行き詰まることがあります。これはその 1 つです。

私はデータバインディングの一般的な考え方を理解しています。ネット上のいくつかのチュートリアルを読み、大量のテキストを数時間グーグル検索しましたが、少し混乱しただけでした。

問題

私はWindows Phone 8 C#/XAML .NET 4.5 Applicationに取り組んでいます。

提供されたいくつかの方法で Web サービスを使用して、表示する必要があるデータを (場合によっては異なる組み合わせで) 読み込んでおり、アプリの実行中はそれらのほとんどを保存する必要があります。

  • その目的のために、ViewModel + いくつかのモデルを作成し、次のように構造化しました。

    MainViewModel
    --------------
    |
    + several properties (Username, Password, etc...)
    |
    + Commands (loadData1, loadData2, flush, ...  - implementations of ICommand)
    |
    + ------ PersonalInfoModel
    |        -----------------
    |        + several properties (name, surname, phonenumber, etc...)
    |
    |             
    + ------ DataGroup1Model
    |        ---------------
    |        +several properties
    |        +ObservableCollection<Item1> (roughly 0 - 50 items)
    |        +ObservableCollection<Item2> (roughly 0 - 5 items)
    |        +ObservableCollection<string> (roughly 0 - 5 items)
    |        
    |                  Item1                         Item2
    |                  -----                         -----
    |                  +several properties           +several other properties
    |                  
    |
    + ------ DataGroup2Model (similar to previous)
    ...et cetera...
    

    ViewModel は一度に読み込まれることはありません(データが読み込まれないため) ではなく、ユーザーがアプリを使用して読み込みたいデータを指定すると、データが読み込まれます (これは主に、タイムスパンやその他のデータに基づいています)。基準)。


  • 次のようにApp.xaml.csMainViewModelを作成しました。

    private static MainViewModel viewModel = null;
    public static MainViewModel ViewModel
    {
        get
        {
            if (viewModel == null)
            {
                viewModel = new MainViewModel();
            }
            return viewModel;
        }
    }
    

    注: 一部の人々から、MVVM は別の方法で使用される可能性がある、または使用する必要があると聞いたことがあります。バインド元のシングルトンのようなクラスを 1 つ持つのではなく、ページごとに ViewModel を作成する必要があります。検討の結果、今のようにさせていただくことにしました。


  • 私が今やりたいことは、viewModel作成したソース/データ コンテキストを XAML でバインドするように設定することです。

質問

  1. これを達成する方法は?

  2. itemSourcelistBox/longListSelector またはTexttextBox の を、たとえばPersonalInfoModel内の値に設定したい場合MainViewModel、どのようにすればよいですか?

PS: 質問冒頭の注意書きにある通り、私は新人です。私たちにとっては難しいこともあることは知っていますが、偉大な思想家は誰も偉大な空虚から生まれたわけではありません。そのため、より詳細な説明を求めています。 "。

4

1 に答える 1

4

あなたが求めている質問は、基本的には、View と ViewModel を接続するにはどうすればよいですか? これは、MVVM を使い始めるときに解決すべき最も紛らわしい問題であり、MVVM に関する多くのチュートリアルや投稿ではこの質問が完全に無視されていることに完全に同意します。

答えは次のとおりです。ViewModel を必要な場所に取得する方法はたくさんありますDataContext。純粋に XAML で行うこともできますが、Microsoft はDataContext、WP プロジェクト テンプレートを思い出せる限り、次のように設定することを提案しています。

コード ビハインドの Views コンストラクターで、次のように呼び出します。

DataContext = App.MainViewModel;

この問題を解決するのに役立った最も貴重な情報源の 1 つは、次の投稿です。

ポール・ストーベルのブログ

それはWP8ではなくWPFに関するものですが、それでも役立つはずです。

実際のバインドを実行するには、次のようなチュートリアルに従うことができます。

<TextBlock Text="{Binding PersonalInfoModel.Name}" />
于 2013-10-16T08:03:40.577 に答える