Как использовать WPF / SL Grid и GridSplitter в качестве привязываемого SplitContainer? - PullRequest
2 голосов
/ 23 сентября 2011

Предположим, вы хотите разрешить пользователю изменять размер сетки WPF / SL, содержащей два столбца.Но вы также хотите разрешить пользователю скрывать один столбец («панель») или другой столбец.Когда показаны оба столбца (панели), также должен быть показан GridSplitter;в противном случае нет.Вы также хотите использовать привязки в стиле MVVM без кода.И, возможно, вы хотите сохранить настройки между сессиями.У вас есть эти свойства в вашей модели представления:

bool IsPanelOneVisible

bool IsPanelTwoVisible

GridLength SplitPosition

Так как я могу подключить это, используя только привязки?

Обратите внимание, что ширина столбца сетки (устанавливается с помощью привязки или на Авто) переопределяется, когда пользователь перетаскивает GridSplitter.

Ни одна из публикаций, которые я просматривал (которые также включают в себяпара реализаций SplitContainer) подробно рассмотрят этот сценарий.Можно связать это, используя программный код (в ответ на события) или дополнительные свойства в модели представления.Но я надеялся на более элегантное решение.

Есть идеи?Спасибо!

1 Ответ

1 голос
/ 23 сентября 2011

Мы столкнулись с той же проблемой, и решения для связывания были настолько грязными, что мы могли бы создать пользовательский элемент управления для выполнения всего вышеперечисленного (разделение и переключение панелей вкл / выкл).

Проблема в том, что размер первого столбца изменяется с размера в пикселях (изменяемого размера с помощью разделителя) на автоматический размер и обратно. Видимость разделителя также может изменяться в зависимости от того, как вы хотите, чтобы он работал.

Как только вы создадите пользовательский элемент управления, вы перестанете беспокоиться о MVVM изнутри ( выделение кода не является злым для пользовательских элементов управления, только на уровне приложения ) и беспокоится только о разоблачении MVVM дружественные свойства, такие как IsPanelOneVisible и т. Д.

...