Переход от одной дочерней страницы к другой в Silverlight - PullRequest
1 голос
/ 03 августа 2011

Мы используем шаблон Silverlight MVVM в нашем приложении.В приложении есть главная страница (которая не изменяется) и есть дочерние страницы, эти дочерние страницы изменяются в зависимости от операции, выполняемой пользователем.До сих пор я использовал code-behind для навигации между различными дочерними страницами, код выглядит так:

ChildPage2 obj = new ChildPage2 ();
Dialog_Box.Children.Clear();
Dialog_Box.Visibility = Visibility.Visible;
Dialog_Box.Children.Add(obj );

Но так как я использую шаблон MVVM, я хочу сделать то же самое, используя свою ViewModel.Есть ли способ сделать то же самое (навигация) с помощью ViewModels.

Пожалуйста, помогите, заранее спасибо.

Vaibhav

Ответы [ 2 ]

1 голос
/ 03 августа 2011

Пара основных правил:

  • ViewModels не должен знать, как они отображаются. Они просто связывают между представлениями и реальными объектами данных и бизнес-логикой.
  • Представления знают только, как отображать данные с определенной формой. Они не должны знать, откуда поступают данные (исключение, нарушающее это правило, использует DomainDataSources ... но это другая история).

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

Альтернатива (сделать это в коде) - ввести контроллеры в MVVM. Это поддерживает разделение проблем между представлениями, моделями представления и данными, но добавляет уровень сложности, который я обычно резервирую для основанных на PRISM приложений. Лучше всего используйте опцию отображения гиперссылки / URL.

0 голосов
/ 03 августа 2011

Способ, которым я решил это раньше, заключался в том, чтобы иметь свойства в ViewModel, к которым будет привязана каждая дочерняя страница:

public class YourViewModel : INotifyPropertyChanged
{
    public Visibility FooVisibility { get { /* ... */ } }
    public Visibility BarVisibility { get { /* ... */ } }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...