2

私はちょうど MVVM Light をいじっているだけで、理解できたと思いますが、問題があります。

データベース (SQLCE) のクラス、マッピングなどを生成する SQL Server CE ツールボックスを使用しています。テーブルの 1 つは Profile と呼ばれ、これをバインドできるプロパティとして使用したいと考えていました。これがViewModelの私のコードです

public class ProfileViewModel : ViewModelBase
{
    private Profile profile; // Profile is the class created by SQLCE Toolbox for table mapping

    public Profile UserProfile 
    {
        get { return profile; }
        set
        {
            profile = value;
            RaisePropertyChanged("UserProfile");
        }
    }

    public ProfileViewModel()
    {  
        if (IsInDesignMode)
        {
            // Code runs in Blend --> create design time data.
            UserProfile = new Profile()
            {
               Name = "NA",
               Age = 22
            }
        }
        else
        {
            // Code runs "for real"
            UserProfile = GetProfile(); 
        }
    }
}

Expression Blend では、ViewModel は表示されますが、Profile プロパティは表示されないため、どこかで例外が生成されていると推測しています。

プロセスとしてブレンドをアタッチしようとしましたが、エラーは発生しませんでした。少し読んだ後、blend がデータベースに接続できないことがわかりました。そのため、DesignMode ではデータを作成する必要があります。やってみUserProfile = new Profile()ましたが、まだデータベースを使用して作成しようとしていると思いますか?

編集:私が抱えている問題は、SQLCEの使用に関連していると思います。WPF と MS SQL で同様のことを試してみると、すべて正常に動作します。

編集 2: これは間違いなくデータベースに関連しています。上記のコードからパブリック プロパティ UserProfile を削除すると、他のすべてのプロパティ (コードには表示されていません) が Blend から表示されます。再度追加すると、何も表示されません。では、どうすればブレンド可能にできますか?

4

2 に答える 2

3

Locatorメカニズムを使用する必要があります。MVVM アプリケーションではデフォルトで表示されます。

設計モードでは、オブジェクトのビルド済みバージョンを提供しますがProfile、非設計モードでは、Profileオブジェクトはデータベースを通じて提供されます。したがって、new Profile()直接使用するのではなく、 のようなものを使用しますLocator.ProvideMeWithUserProfile()

たとえば、このビデオを見て、それを達成する方法を確認できます。

于 2013-02-25T21:29:50.213 に答える