передать конкретный идентификатор в MVVM - PullRequest
2 голосов
/ 18 июня 2010

Это то, чего я не понимаю. Если у меня есть, например, страница profile.xaml, и у меня есть ProfileViewModel с пользовательским экземпляром. Как мне указать ProfileViewModel со свойством User загружать пользователя с нужным мне идентификатором?

Я имею в виду: как передать идентификатор пользователя в viewviewmodel, когда я нажимаю кнопку на другой странице, чтобы открыть эту страницу?

Для экземпляра

Userlist.xaml имеет список пользователей. Один щелкается и загружается экземпляр Profile.Xaml, но как мне передать userId в viewmodel? Не понадобится ли мне свойство зависимости в profile.xaml, а затем передать его?

Скажите, пожалуйста, имеет ли это для вас смысл:)

Ответы [ 2 ]

2 голосов
/ 19 июня 2010

Вам следует рассмотреть возможность привязки вашего списка пользователей в Userlist.xaml к коллекции экземпляров ProfileViewModel, тогда вы можете просто предоставить конкретный ProfileViewModel для profile.xaml.

В этом примере ваш Userlist.xaml будет содержать:

<UserControl Name="userView">
    <!-- other stuff -->
    <ItemsControl ItemsSource={Binding Users}>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding UserName}" />
                    <Button Content="View User Profile"
                    Command="{Binding ElementName=userView, Path=DataContext.ViewUserProfileCommand}"
                    CommandParameter="{Binding}" />
                </StackPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
    <!-- other stuff -->
</UserControl>

И ваш UserlistViewModel будет включать в себя:

    #region Users Property

    public const string UsersPropertyName = "Users";

    private ObservableCollection<IProfileViewModelViewModel> _users;

    public ObservableCollection<IProfileViewModelViewModel> Users
    {
        get { return _users; }
        set
        {
            if (_users == value)
                return;

            _users = value;
            RaisePropertyChanged(UsersPropertyName);
        }
    }

    #endregion

    public RelayCommand<IProfileViewModel> ViewUserProfileCommand
        = new RelayCommand<IProfileViewModel>(ViewUserProfileCommandExecute);

    private void ViewUserProfileCommandExecute(IUserProfileViewModel userProfileViewModel)
    {
        // display your profile view here
    }

Как упомянуто выше Ридом, одним из способов передачи модели представления профиля пользователя на другую страницу будет Обмен сообщениями MVVM Light Toolkit .

2 голосов
/ 18 июня 2010

Здесь есть несколько вариантов.

Если вы работаете из «родительской» ViewModel, вы можете потенциально создать новую ProfileViewModel с определенным идентификатором пользователя и установить для него свойство, которое будет напрямую выбрано вашим View. Именно такой подход я использовал в своей статье MVVM .

В качестве альтернативы, если у вас есть одна ProfileViewModel (и ProfileView), и она не «подключена» к экрану / представлению, где вы выбираете пользователя напрямую, обычно лучше всего использовать какую-либо форму службы сообщений. Этот подход MVVM Light использует.

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