私は2つのタブアイテムを持っています。ユーザーはデータを入力し、最初のタブに保存します。2 番目のタブには、保存されたデータが一覧表示されます。私が必要とするのは、ユーザーが最初のタブにデータを保存する前に 2 番目のタブを選択すると、[はい]、[いいえ]、[キャンセル] の確認メッセージ ボックスが表示されることです。ユーザーが [はい] ボタンをクリックすると、データが保存され、2 番目のタブに移動します。No を押すと、データを保存する必要はありません。最後に Cancel を押すと、入力されたすべてのデータがタブに保持されます。どうすればこれを作ることができますか?
3 に答える
物事を単純にするために、CodeBehindファイルで次のことを行うことができます。
WPFコントロールで表示および編集するデータのModelクラスを作成します。モデルにINotifyPropertyChanged
とIEditableObject
インターフェースを実装させます。
INotifyPropertyChanged
モデルにバインドできるようになります。
IEditableObject
編集、保存、キャンセル機能を提供できるようになります。
TabControlにはSelectionChanged
、ユーザーがタブを変更したことを検出できるイベントがあります。このハンドラーではSystem.Windows.MessageBox
、ユーザーに保存などを依頼し、ユーザーがクリックして実行したボタンを判別するために使用できるオブジェクトをSystem.Windows.MessageBox.Show()
返します。MessageBoxResult
適切な行動。
これは物事を行うための優れた方法ではありませんが、物事を単純に保つので、コード管理性を支援するためにいくつかのWPFデザインパターンを調べることをお勧めします。
さらに説明が必要な場合は、質問してください。
タブからタブへのユーザーの流れを中断する方法には同意しませんが、冗談を言って質問に答えます。
これを行うには、次の 2 つのことが必要です。
- タブがクリックされたときに発生するイベント
- 前に選択されたタブ (元のタブ)
最初の項目:
タブ コントロールには、サブスクライブできる Click メソッドがあります。
Click=”MyTabButton_Click”
2 番目の項目:
この部分は手動で行う必要があります。最後に選択されたタブを含むクリックイベントで変数を設定できます。これが設定されると、以前にどのタブが選択されたかについて、(以前に設定した) 変数を確認できます。その後、すべての検証を行うことができます。
Delphi の TPageControl には、「AllowChange」パラメータを持つ OnChanging イベントがあります。WPFにも似たようなものがあると思います。