SL3 Nav рамки + MVVM свет - PullRequest
1 голос
/ 01 марта 2010

Спасибо, что нашли время, чтобы прочитать мой вопрос. Любое руководство действительно ценится.

Я использую SL3 Navigation Framework в своем LOB-приложении. В настоящее время я использую MVVM Light в качестве руководства.

У меня есть сетка данных, состоящая из сотрудников, и когда «пользователь» нажимает на «ссылку на идентификатор сотрудника» в сетке данных, я передаю пользователю «Редактировать страницу». Я хотел бы перенести «идентификатор сотрудника» в качестве параметра запроса на «страницу редактирования».

Проблема здесь в следующем: я могу получить доступ к параметру запроса в EditStaffView.xaml.cs - что я не хочу делать.

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        if (this.NavigationContext.QueryString.ContainsKey("staffcode"))
        {
            string title = this.NavigationContext.QueryString["staffcode"];
        }
    }

Я хотел бы получить параметр запроса в моей модели представления и, основываясь на параметре запроса, я буду выполнять определенные операции. Когда вызывается конструктор, я бы хотел, чтобы "view" передавал staffid, как показано ниже

    public EditStaffViewModel(int staffId)
    {
        LoadData(staffId);
    }

Я строю свои кнопки гиперссылок в сетке данных, как показано ниже:

staffListingModel.HyperlinkNavigationUri = string.Format ("{0} {1}", NavigationUri.DataEntryEditStaff, "? Staffcode = {" + staffListingModel.StaffCode + "}");

и XAML выглядит

HyperlinkButton Content = "{Binding StaffCode, Mode = TwoWay}" NavigateUri = "{Binding HyperlinkNavigationUri}"> HyperlinkButton

Есть идеи, как это сделать ??

Спасибо за помощь. Murari

1 Ответ

0 голосов
/ 27 марта 2010

Я бы не пошел с Querystring. так как вы используете MVVM Light Toolkit. Взгляните на Messenger и воспользуйтесь общедоступным шаблоном подписчика. Похож на PRISM Eventaggregator.

Разошлите «Штатный код» и подпишитесь на каждую модель представления, которой необходимо воспользоваться. Вы также можете отправить весь объект сотрудника.

Messenger.Default.Send (selectedEmployee);

Messenger.Default.Subscribe (это); Обратитесь к этой ссылке для сообщений: http://blog.galasoft.ch/archive/2010/03/16/whatrsquos-new-in-mvvm-light-v3.aspx Eventaggregator: http://msdn.microsoft.com/en-us/library/cc707867.aspx

В случае глубоких ссылок и навигации в сочетании с mvvm вы должны думать иначе. Связь между ViewModels должна осуществляться с помощью Messenger. Eventaggregator или Messenger.

Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...