2

ユーザーが2つの列を含むWPF/SLグリッドのサイズを変更できるようにしたいとします。ただし、ユーザーが1つの列(「パネル」)または他の列を非表示にできるようにする必要もあります。両方の列(パネル)が表示されている場合は、GridSplitterも表示されている必要があります。そうでなければそうではありません。また、コードビハインドなしでMVVMスタイルのバインディングを使用する必要があります。また、セッション間で設定を保持したい場合もあります。ビューモデルには次のプロパティがあります。

bool IsPanelOneVisible

bool IsPanelTwoVisible

GridLength SplitPosition

では、バインディングのみを使用してこれを配線するにはどうすればよいですか?

ユーザーがGridSplitterをドラッグすると、グリッド列の幅(バインディングまたは自動のいずれかで設定)が上書きされることに注意してください。

私が熟読した投稿(SplitContainerの実装もいくつか含まれています)は、このシナリオに正面から取り組んでいません。コードビハインド(イベントに応答)またはビューモデルの追加プロパティを使用して、これを接続できます。しかし、私はもっとエレガントな解決策を望んでいました。

何か案は?ありがとう!

4

1 に答える 1

1

同じ問題が発生し、バインディングソリューションが非常に面倒で、上記のすべて(ペインのオン/オフの分割と切り替え)を実行するユーザーコントロールを作成することになりました。

問題は、最初の列のサイズがピクセルサイズ(スプリッターによってサイズ変更可能)から自動サイズに変更され、再び元に戻ることです。スプリッターの可視性も、どのように機能させたいかによって変わる可能性があります。

多くのことを行うためのユーザーコントロールを作成すると、内部のMVVMについて心配する必要がなくなり(コードビハインドはユーザーコントロールにとって悪ではなく、アプリケーションレベルでのみ)、MVVMに適したプロパティの公開についてのみ心配しますIsPanelOneVisible

于 2011-09-23T08:35:21.690 に答える