で作業する場合XAFのアプリケーション、エンドユーザーは、オブジェクトを選択することができますに表示ビュー。あなたは、多くの場合、これらのオブジェクトからアクセスする必要があるかもしれコントローラとアクションを様々なビジネスタスクを実行します。アクションを実装する場合たとえば、あなたは、アクションが実行されたときにそのプロパティ値を変更するには、フォーカスがあるオブジェクトにアクセスする必要があるかもしれません。このトピックでは、集中と選択したオブジェクトの操作の基本を説明し、サンプルコードスニペットを提供します。
XAFアプリケーションを使用する場合、エンドユーザは、ビューに表示されたオブジェクトを選択してもよいです。あなたは、さまざまな操作やビジネスタスクを実行するために、コントローラからこれらのオブジェクトにアクセスする必要があるかもしれません。例えば、運転の実現には、あなたは、アクションの実装にそのプロパティ値を変更するために、オブジェクトのフォーカスにアクセスする必要があるかもしれません。このトピックでは、オブジェクトと、選択したオブジェクトのフォーカスを操作の基本を説明し、サンプルコードスニペットを提供します。
ヒントヒント
完全なサンプルプロジェクトは、DevExpress社のコード例のデータベースで利用可能でhttp://www.devexpress.com/example=E3016
完全なサンプルプロジェクトは、コードサンプルデータベースDevExpress社で見つけることができますhttp://www.devexpress.com/example=E3016
。
アクションが実行された場合のアクセスは、現在のオブジェクトを選択します
操作の実行中に、現在選択されたオブジェクトにアクセスします
アクションが実行されると、その実行イベントがトリガされます。かかわらず、アクションタイプの、引数が含まれているイベントハンドラに渡さSimpleActionExecuteEventArgs.CurrentObjectとSimpleActionExecuteEventArgs.SelectedObjectsプロパティを。CurrentObjectプロパティには、アクティブなビューの現在のオブジェクトを指定します。アクティブビューは、リストビューの場合、このプロパティは、フォーカスがあるオブジェクトを指定します。ビューが詳細表示の場合は、プロパティは、オブジェクトがそれによって表示を指定します。SelectedObjectsは、アクティブビューで選択したオブジェクトのコレクションです。詳細ビューの場合、このプロパティが返すのCurrentObjectがリストに包まれました。
操作を実行すると、その実装は、イベントをトリガします。どのように、入力操作は、「イベントの簡単な実装」属性が含まれているかどうか、イベントハンドラにパラメータを渡すことができます。現在のオブジェクトの「現在のオブジェクト」属性は、アクティブなビューを指定します。アクティブビューは、リストビューの場合、この属性は、フォーカスオブジェクトを指定します。「ビュー」「詳細表示」、指定されたオブジェクトのプロパティの表示である場合。「選択したオブジェクトが」選択したオブジェクトのビューでの活動の集まりです。このプロパティのパッケージの詳細図の場合には、リスト内の現在のオブジェクトを返します。
次のコードスニペットは、アクションが接触タイプのために意図を示しています。アクションが実行されると、それがに(給与が転送された瞬間についての)情報を表示する新しい行追加メモリストビューで現在選択されたオブジェクトのプロパティ値、または詳細ビューに表示されたオブジェクトを。
次のコードスニペットは、コンタクトのための操作の種類を示しています。操作を実行すると、それは現在、(賃金の転送時間程度)新しいディスプレイ、ディスプレイ情報を追加するオブジェクトまたは件名に「詳細表示」のプロパティ値にリストビュー注意を選択します。
使用してシステムを。 使用にSystem.Collectionsを。 使用してDevExpress.ExpressAppを。 使用してDevExpress.ExpressApp.Actionsを。 使用してDevExpress.ExpressApp.EFを。 // ... 公共の 部分 クラスMyNotesController:のViewController { 公共MyNotesController(){ のSimpleAction myAction = 新しいのSimpleAction(この、" 給与情報"、" 編集" ); myAction.SelectionDependencyType = SelectionDependencyType.RequireMultipleObjects。 myAction.TargetObjectType =typeof演算(連絡先)。 myAction.Execute + = myAction_Execute。 Actions.Add(myAction)。 } ボイド myAction_Execute(オブジェクト送信者、SimpleActionExecuteEventArgs E){ ArrayListのSelectedContacts = 新しいArrayListを()。 もし((e.SelectedObjects.Count> 0)&& ((e.SelectedObjects [ 0 ] である XafDataViewRecord)||(e.SelectedObjects [ 0 ] であるXafInstantFeedbackRecord))){ foreachの(VARselectedObject でe.SelectedObjects){ SelectedContacts.Add((接触)ObjectSpace.GetObject(selectedObject))。 } } 他{ SelectedContacts = (ArrayListの)e.SelectedObjects。 } foreachの(接触selectedContact でSelectedContacts){ 日時今 = DateTime.Now。 selectedContact.Notes + = " \ R \ N [INFO]給料が転送され、" + now.ToString(" M / D / YY ")+ " で" + now.ToString(" HH:MM " ); } ObjectSpace.CommitChanges()。 ObjectSpace.Refresh(); } }
Note 注意
上記のコードでは、各選択された連絡先オブジェクトは、別個のデータベース要求によって得られます。
上記のコードを使用して、各要求は別々のデータベースによって選択された連絡先オブジェクトを取得します。
アクションを指定して実行されたときに、特定のビューを表示することができActionBaseEventArgs.ShowViewParametersのプロパティを実行し、イベントハンドラを使用したりPopupWindowShowActionを。しかし、関係なく、アクションタイプの、実行イベントハンドラの引数は、常にではなく、行動の結果として表示されたビューのアクションが呼び出されたためにビューの集中と選択したオブジェクトが含まれています。
操作を行う際に指定されたイベントハンドラ属性またはActionBaseEventArgs.ShowViewParameters PopupwindowShowActionを行うことにより、特定のビューが表示されてもよいです。しかし、関係なく、操作の種類、実行イベントハンドラのパラメータは、常に選択したオブジェクトのではなく、操作の結果として焦点を当て、操作のためのビューが呼び出される含めるには、ビューに表示されます。
ビューコントローラとアクセス現在選択されているオブジェクト
ビューコントローラは、現在選択されているオブジェクトにアクセスし使用
あまり一般的なタスクは、コントローラからの眺めの集中と選択したオブジェクトにアクセスしています。この例では、あなたが使用する必要がありますView.CurrentObjectとView.SelectedObjectsで指定されたViewオブジェクトのプロパティViewController.Viewのプロパティを。- Viewオブジェクトによって公開されたプロパティが変更通知イベント対応しているView.CurrentObjectChangedとView.SelectionChangedを。だからコントローラから集中と選択したオブジェクトにアクセスする最善のアプローチは、これらのイベントを処理することです。
アクセスの集中コントローラから以下の一般的なタスクと選択したオブジェクトを表示します。この場合、使用ビューオブジェクトと電流を表示する。選択したオブジェクトのプロパティは、.Viewビュー・オブジェクトの属性コントローラビューで指定されました。オープンビュー・オブジェクト属性は、対応する変更通知イベントがある - ビューを、現在のオブジェクトビューの選択の変更を変更します... したがって、オブジェクトと、コントローラーから選択されたオブジェクトのフォーカスをアクセスするための最良の方法は、これらのイベントに対処することです。
次のコードスニペットは、コントローラは、連絡先の詳細ビューのために意図を示しています。これは、変更DeleteObjectsViewController.DeleteActionのActionBase.ConfirmationMessageを。あなたは1人の連絡先を削除しようとしている場合は、フルネームの連絡先を削除しようとしているに追加されますConfirmationMessage。あなたは、いくつかの連絡先を削除したい場合は、選択した連絡先の数が代わりに追加されます。
次のコードセグメントは、ビューの連絡先の詳細のためのコントローラを示す図です。これは、削除されたオブジェクトのビューコントローラを変更します。削除ライブラリ操作。確認メッセージを。連絡先を削除したい場合は、フルネームは、確認メッセージに追加連絡先を削除しました。あなたが複数の連絡先を削除したい場合は、選択した「連絡先」のカウントを追加するために変更されます。
パブリック クラスMyConfirmationController:のViewController { プライベート 文字列defaultMessage。 DeleteObjectsViewController deleteObjectsViewController; パブリックMyConfirmationController(){ この .TargetObjectType = typeof演算(接触) } 保護 オーバーライド ボイドOnActivated(){ 塩基.OnActivated()。 deleteObjectsViewController = Frame.GetController <DeleteObjectsViewController> (); もし(deleteObjectsViewController!= nullの){ defaultMessage =deleteObjectsViewController.DeleteAction.GetFormattedConfirmationMessage(); View.SelectionChanged + = View_SelectionChanged。 UpdateConfirmationMessage(); } } ボイド View_SelectionChanged(オブジェクト送信者、System.EventArgs e)の{ UpdateConfirmationMessage()。 } プライベート ボイドUpdateConfirmationMessage(){ 場合(View.SelectedObjects.Count == 1 ){ deleteObjectsViewController.DeleteAction.ConfirmationMessage = String.Formatの("あなたは「{0}」連絡先を削除しようとしています。続行しますか?" ((連絡先)View.CurrentObject).FullName); } 他{ deleteObjectsViewController.DeleteAction.ConfirmationMessage = String.Formatの(" 。?連絡先あなたは{0を削除しようとしています}続行しますか」、 (View.SelectedObjects .Count)); } } 保護オーバーライドボイドOnDeactivated(){ 塩基.OnDeactivated(); 場合!(deleteObjectsViewController = NULL ){ View.SelectionChanged - = View_SelectionChanged。 deleteObjectsViewController.DeleteAction.ConfirmationMessage = defaultMessage。 deleteObjectsViewController = nullを。 } } }
Note 注意
View.CurrentObjectとView.SelectedObjectsプロパティが返すXafDataViewRecordは、ビューがで動作する場合、元のビジネスオブジェクトの代わりにオブジェクトのDataViewモード(とXafInstantFeedbackRecord -でInstantFeedbackのモード)。実際のオブジェクトを取得するには、使用View.ObjectSpace.GetObject(OBJ)メソッドを。
場合ビューモードにおけるビューデータ(記録XafInstantフィードバック - 即時フィードバックモードで)、現在のビューおよびビュー・オブジェクト。プロパティの戻りではなく、元のビジネスオブジェクトの、オブジェクトレコードのオブジェクトを選択しXafDataViewRecord。実際のオブジェクトを取得するには、View.ObjectSpace.GetObject(OBJ)メソッドを使用します。