Silverlight 将特定ID传递给MVVM

Silverlight 将特定ID传递给MVVM,silverlight,mvvm,Silverlight,Mvvm,这是我不明白的。例如,如果我有一个profile.xaml页面,我有一个带有用户实例的ProfileViewModel。如何让具有用户属性的ProfileViewModel加载具有所需id的用户 我的意思是:当我单击另一个页面中的按钮打开该页面时,如何将用户ID传递给profileviewmodel 比如说 Userlist.xaml有一个用户列表。单击一个并加载Profile.Xaml实例,但是如何将用户ID传递到viewmodel?我是否需要profile.xaml中的一些dependenc

这是我不明白的。例如,如果我有一个profile.xaml页面,我有一个带有用户实例的ProfileViewModel。如何让具有用户属性的ProfileViewModel加载具有所需id的用户

我的意思是:当我单击另一个页面中的按钮打开该页面时,如何将用户ID传递给profileviewmodel

比如说

Userlist.xaml有一个用户列表。单击一个并加载Profile.Xaml实例,但是如何将用户ID传递到viewmodel?我是否需要profile.xaml中的一些dependencyproperty,然后将其传递下去


请告诉我这对您是否有意义:)

这里有多个选项

如果在“父”视图模型中工作,则可以使用特定的用户ID构造新的ProfileViewModel,并将其设置为视图直接拾取的属性。这是我在工作中使用的方法


或者,如果您有一个ProfileViewModel(和ProfileView),并且它没有“连接”到您直接选择用户的屏幕/视图,那么最好的选择通常是使用某种形式的消息服务。这是使用的方法。

< P>您应该考虑将用户列表中的用户列表绑定到一个PrruleVIEWMWATE实例集合中,然后您可以将特定的PrimeLeVIEW模型提供给PrimeXML.

在本例中,您的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>
    #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
    }

您的UserlistViewModel将包括:

<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>
    #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
    }
#区域用户属性
public const string UsersPropertyName=“Users”;
私有可观察收集用户;
公共可观测收集用户
{
获取{return\u users;}
设置
{
if(_users==值)
返回;
_用户=价值;
RaisePropertyChanged(UsersPropertyName);
}
}
#端区
公共RelayCommand viewUserProfile命令
=新的RelayCommand(ViewUserProfileCommandExecute);
私有void ViewUserProfileCommandExecute(IUserProfileViewModel userProfileViewModel)
{
//在此处显示您的纵断面图
}
如上所述,将用户概要视图模型传递到其他页面的一种方法是