方法:非永続オブジェクトの表示方法に永続オブジェクトを表示するには、次のビューの非永続オブジェクトに永続オブジェクトを表示します

このトピックでは、永続型を宣言する方法について説明し、参照またはコレクション内のプロパティを非永続クラスとユーザーインターフェースに表示し、必要に応じてそれにデフォルト値を割り当てます。

  • 永続リファレンスプロパティ
  • 永続的なコレクション
  • 永続プロパティ値を初期化します
  • 重要な注意事項

ここでは、基準またはユーザインターフェースの属性とディスプレイをセットし、割り当てデフォルト値に非永続クラス宣言永続型で選択することができる方法を記載しています。

  • プロパティへの永続的な言及
  • 永続的なコレクション
  • 永続的なプロパティ値の初期化
  • 重要

永続リファレンスプロパティ

プロパティへの永続的な言及

次の非永続クラスを考えてみましょう。

次の非永続クラスを考えてみましょう。

使用してDevExpress.ExpressApp.DCを。
使用してDevExpress.Persistent.Baseを。
使用してDevExpress.Persistent.BaseImplを。
// ... 
[DomainComponent、DefaultClassOptions]
 パブリック クラスNonPersistentObject {
     // ... 
    パブリック 文字列名前{ 取得しますセット; }
     公共の人の所有者{ 取得しますセット; }
     // ... 
}
Note 注意
INotifyPropertyChangedのIXafEntityObjectIObjectSpaceLinkインタフェースの実装は、この例では省略しました。しかし、(参照実際のアプリケーションでは、これらのインターフェイスをサポートすることが推奨され、ビジネスクラスでのPropertyChangedイベント非永続オブジェクト)。
この例ではINotifyPropertyChangedの、IXafEntityObjectとIObjectSpaceLinkインターフェイスを省略します。しかし、実用的なアプリケーション(ビジネスクラスと非永続オブジェクトプロパティ変更イベントを参照)で、これらのインタフェースをサポートすることをお勧めします。
 
 
ヒント提示使用して実証されたアプローチにする方法:ローカルキャッシュからオブジェクトの保存と読み込み、非永続サポートする非永続オブジェクトのトピックでCRUD操作を実行します。
用途:メソッド「どのようにCRUD操作を実行するために、非永続オブジェクトを使用する」ローカルキャッシュから、プレゼンテーションのトピックを保存し、荷重支持非永続オブジェクト。

 

ここでは、から永続クラスである(Entity Frameworkのか、XPO用)ビジネスクラスライブラリ。参照してくださいビジネスクラスライブラリ(EF)からクラスを追加するか、このライブラリからクラスを追加する方法を学ぶためにビジネスクラスライブラリ(XPO)トピックからクラスを追加します。また、あなたがするのではなく、カスタムビジネスクラスを使用することができる

ここでは、ビジネスパーソンから永続クラスライブラリ(またはエンティティXPO用フレーム)。ビジネスクラス・ライブラリ(EF)を参照してくださいまたはクラス(XPO)を追加したテーマは、ライブラリからクラスを追加する方法を学び、ビジネスライブラリからクラスを追加します。また、あなたはまた、スタッフの代わりにカスタムビジネスクラスを使用することができます。

 

この段階で、詳細表示には、新しい作成呼び出さNonPersistentObjectのため、ディスプレイのルックアップエディタの所有者の財産を。しかし、ルックアップは空であり、そしてあなたは、既存の選択ができない人を

あなたは非永続オブジェクトのための新しい外観は、エディタのプロパティに表示されます作成するときは、この段階では、詳細ビューが呼び出され、「所有者を。」しかし、空見て、あなたは、既存のスタッフのいずれかを選択することはできません。

PersistentInNonPresistent1

NonPersistentObjectSpaceは処理できない現在の表示用に作成された永続オブジェクトを。このタイプのための永続的なオブジェクトスペースを作成するために、以下の手順に従ってください。

人永続オブジェクトを扱うことができない非永続オブジェクト空間の現在のビューのために作成。スペースのこのタイプの永続オブジェクトを作成し、次の手順を実行します。

1.Handle XafApplication.ObjectSpaceCreatedのモジュールまたはコントローラ内のイベント。

イベントハンドラ2.Inのための追加オブジェクトスペース作成者の種類をし、このオブジェクトのスペースを追加しNonPersistentObjectSpace.AdditionalObjectSpacesのコレクション。

1.処理XAFアプリケーションモジュールまたはコントローラは、イベントを作成.ObjectSpace。

イベントハンドラで、[Personオブジェクト・タイプのための追加のスペースを作成し、非永続オブジェクト空間にオブジェクト空間を追加します。コレクション「追加オブジェクト空間。」

 

次の例では、プラットフォームに依存しないモジュール(でこれを行う方法を示してMySolution.Module / Module.csVB)):

次の例では、プラットフォームに依存しないのモジュールでこれを行う方法(MySolutionモジュール/モジュールは.cs(VB)を示しています。

使用してDevExpress.ExpressAppを。
// ... 
パブリック クラスMySolutionModule:ModuleBase {
     プライベート 無効 Application_ObjectSpaceCreated(オブジェクト送信者、ObjectSpaceCreatedEventArgs E){
         場合(e.ObjectSpaceがあるNonPersistentObjectSpace){ 
            IObjectSpace additionalObjectSpace = Application.CreateObjectSpace(typeof演算(人)); 
            ((NonPersistentObjectSpace)e.ObjectSpace).AdditionalObjectSpaces.Add(additionalObjectSpace)。
            e.ObjectSpace.Disposed + =(S、引数)=> { 
                additionalObjectSpace.Dispose()。 
            }; 
        }
    } 
    公共 オーバーライド ボイドセットアップ(XafApplicationアプリケーション){
         塩基.Setup(アプリケーション)。
        application.ObjectSpaceCreated + = Application_ObjectSpaceCreated。
    } 
}

 

結果は以下を実証しています。

結果は以下の通りです。

PersistentInNonPresistent2

永続的なコレクション

永続的なコレクション

あなたは追加することができます所有者のコレクションの代わりに、所有者参照プロパティを:

あなたは、コレクションの「所有者」ではなく、「所有者」属性の参照を追加することができます。

[DomainComponent, DefaultClassOptions]
public class NonPersistentObject{
    // ... 
    public string Name { get; set; }
    private IList<Person> owners = new List<Person>();
    public IList<Person> Owners {
        get {
            return owners;
        }
    }
}

 

Users can add and remove Owners via the Link and Unlink Actions after adding the code from the previous section.

用户可以在添加上一节中的代码后,通过链接和取消链接操作添加和删除所有者。

PersistentInNonPresistent_Collection

Initialize Persistent Property Values

初始化持久性属性值

Implement the IObjectSpaceLink interface in your non-persistent class and use the IObjectSpace.GetObjects<T> method to get required persistent objects.

在非持久性类中实现 IObjectSpaceLink 接口,并使用 IObjectSpace.GetObjects<T> 方法获取所需的持久对象。

[DomainComponent, DefaultClassOptions]
public class NonPersistentObject : IObjectSpaceLink {
    public string Name { get; set; }
    private Person owner;
    public Person Owner {
        get {
            if (owner == null) {
                owner = ObjectSpace.GetObjects<Person>(CriteriaOperator.Parse("FirstName='Sam'")).FirstOrDefault();
            }
            return owner;
        }
        set { owner = value; }
    }
    private IList<Person> owners;
    public IList<Person> Owners {
        get {
            if (owners == null) {
                owners = ObjectSpace.GetObjects<Person>(CriteriaOperator.Parse("StartsWith(FirstName, 'B')")) ;
            }
            return owners;
        }
    }
    private IObjectSpace objectSpace;
    [Browsable(false)]
    public IObjectSpace ObjectSpace {
        get { return objectSpace; }
        set { objectSpace = value; }
    }
}

 

If you create a new NonPersistentObject in UI, its Owner property and Owner collection are initialized:

如果在 UI 中创建新的非持久对象,则初始化其所有者属性和所有者集合:

PersistentInNonPresistent_Init

Important Notes

重要说明

Note the following if your non-persistent class contains persistent properties and implements IObjectSpaceLink.

如果非持久性类包含持久性属性并实现 IObjectSpaceLink,请注意以下事项。

When loading such an object from a separate NonPersistentObjectSpace, you get the same object instance linking to the initial Object Space via IObjectSpaceLink.ObjectSpace. If this behavior is unwanted, you can update the Object Space in the NonPersistentObjectSpace.ObjectsGetting event handler. Modify the MySolutionModule class demonstrated in the Persistent Reference Property section as follows:

从单独的非持久对象空间加载此类对象时,您会通过 IObjectSpace.ObjectSpace 获得链接到初始对象空间的相同对象实例。如果此行为是不需要的,则可以更新非持久对象空间中的对象空间。修改持久参考属性部分中演示的 MySolutionModule 类,如下所示:

using DevExpress.ExpressApp;
//...
public class MySolutionNameModule : ModuleBase {
    private void Application_ObjectSpaceCreated(object sender, ObjectSpaceCreatedEventArgs e) {
        if(e.ObjectSpace is NonPersistentObjectSpace) {
            IObjectSpace additionalObjectSpace = Application.CreateObjectSpace(typeof(Person));
            ((NonPersistentObjectSpace)e.ObjectSpace).AdditionalObjectSpaces.Add(additionalObjectSpace);
            ((NonPersistentObjectSpace)e.ObjectSpace).ObjectGetting += ObjectSpace_ObjectGetting;
            e.ObjectSpace.Disposed += (s, args) => {
                ((NonPersistentObjectSpace)s).ObjectGetting -= ObjectSpace_ObjectGetting;
                additionalObjectSpace.Dispose();
            };
        }
    }
    private void ObjectSpace_ObjectGetting(object sender, ObjectGettingEventArgs e) {
        if(e.SourceObject is IObjectSpaceLink) {
            e.TargetObject = e.SourceObject;
            ((IObjectSpaceLink)e.TargetObject).ObjectSpace = (IObjectSpace)sender;
        }
    }
    公共 オーバーライド ボイドセットアップ(XafApplicationアプリケーション){
         塩基.Setup(アプリケーション)。
        application.ObjectSpaceCreated + = Application_ObjectSpaceCreated。
    } 
}

 

おすすめ

転載: www.cnblogs.com/foreachlife/p/How-to-Show-Persistent-Objects-in-a-Non-Persistent-Object-s-View.html