2016-07-07 3 views
-2

WPFコンボボックスの仕組みを考えるのは本当に困難です。オンラインでは多くの例がありますが、非常に一般的なケース、ComboBoxと保存/キャンセルボタンが付いたフォームは、以下で説明するようなものはありません。WPFダイアログキャンセル - 一般的なシナリオ

私がしようとしているのは、2つの文字列、たとえば "A"と "B"で1つのComboBoxを持つWPFフォームを持つことです。 2つのボタンは保存してキャンセルします。

オンキャンセルボタンをクリックすると、新しく選択された値は無視されます。たとえば、フォームが開かれたときにComboBoxが値 "A"を表示し、ユーザーが選択を "B"に変更してキャンセルをクリックすると、 "A"を表示してフォームを再度開きます。

オン保存ボタンをクリックすると、選択した値が保存されます。たとえば、フォームが開かれたとき、ComboBoxは値 "A"を表示し、ユーザーは "B"を選択して保存をヒットし、フォームを再び開くと "B"が表示されます。

私は何も持っていないので、私はコードを提供していません。私はちょうど私の学習のためのこのシナリオをカバーするサンプル/チュートリアルを見つけることを試みています。

更新 WPF、MVVM(または関係なく)。私が見ているのは、このようなシナリオをカバーする良いリンクです。私が探しているのは、最小限のもので、フォームにコンボを表示しているだけです。または別のバージョンはa)新しい値を選択する、b)実際にそれを選択したいことを確認するためのプロンプトを表示します(言うまでもなく、それはただのばかです)。 このような一般的なシナリオでは奇妙に感じます。

+0

ですので、コンボボックスと選択したアイテムにデータをバインドしても構いませんか?それが保存されていない限り、あなたの質問は選択を「元に戻す」だけですか?それとも両方ですか? – Lapious

+0

MVVMかどうかどちらも気にしない? – Jai

+1

このサイトは、「私は** x **をやろうとしていますが、この問題を抱えています。 – code4life

答えて

1

ここで問題が発生した理由がわかりません。可能な最大の問題はおそらく、あなたが何かをしなくても動作すると想像したようにコントロールが動作すると思うからです。努力をに入れて、必要なように動作させる必要があります。

フォームを閉じるたびに、そのインスタンスを破棄します。同様に、フォームを開くと、新しいインスタンスが作成されます。それはまったく新しいインスタンスなので、開かれたときとまったく同じように、それが何をしたのかを正確に示すのは意味がありませんか?

閉鎖と開封の間に永続的な情報が必要な場合は、破棄されない場所に格納するのと同じくらい簡単です。

"保存"ボタンのClickイベントハンドラの場合は、コンボボックスの値を他の場所、おそらくリポジトリ、静的なシングルトンのどこか、またはメインウィンドウにコピーします。

// e.g. static singleton 
MySingletonStorage.Instance.ComboBoxValue = myComboBox.Text; 

フォームのコンストラクタで、単に値をストレージから取得するだけです。

myComboBox.Text = MySingletonStorage.Instance.ComboBoxValue; 
関連する問題