C# 发送带有命令参数的对象

C# 发送带有命令参数的对象,c#,mvvm,windows-phone,prism,C#,Mvvm,Windows Phone,Prism,我正在使用PRISM使用MVVM设计模式开发我的Windows Phone应用程序。我需要通过委托命令将SelectedItem对象从LongListSelector传递到我的方法中 我能做到。问题是,我传入了错误的对象。我不知道这是设计问题还是绑定不当 我需要对象是相册对象。取而代之的是null或我的ViewModel。(我已经更改了几次代码,这是我唯一能得到的。) XAML 视图模型 private ObservableCollection<Album> _albums;

我正在使用PRISM使用MVVM设计模式开发我的Windows Phone应用程序。我需要通过委托命令将SelectedItem对象从LongListSelector传递到我的方法中

我能做到。问题是,我传入了错误的对象。我不知道这是设计问题还是绑定不当

我需要对象是相册对象。取而代之的是null或我的ViewModel。(我已经更改了几次代码,这是我唯一能得到的。)

XAML


视图模型

private ObservableCollection<Album> _albums;
    public ObservableCollection<Album> Albums
    {
        get { return _albums; }
        set
        {
            if (value != null)
            {
                _albums = value;
                NotifyPropertyChanged();
            }
        }
    }

    private Album _selectedAlbum;
    public Album SelectedAlbum
    {
        get { return _selectedAlbum; }
       // code removed as it is not needed; the object is null when trying to set.
}

        public void AlbumSelected(object p)
    {

        App.Dispatcher.BeginInvoke(() =>
            {
                SelectedAlbum = (Album)p;
            });

        ////Navigate("/Views/PhotosListPage.xaml");
    }

//command that takes an object as parameter.
            _selectAlbumCommand = new DelegateCommand<object>(this.AlbumSelected);
private observeCollection\u相册;
公开收集册
{
获取{return\u相册;}
设置
{
if(值!=null)
{
_相册=价值;
NotifyPropertyChanged();
}
}
}
私人相册_selectedAlbum;
公共专辑精选专辑
{
获取{return\u selectedAlbum;}
//代码已删除,因为不需要它;尝试设置时对象为空。
}
已选择公共对象(对象p)
{
App.Dispatcher.BeginInvoke(()=>
{
SelectedAlbum=(唱片)p;
});
////导航(“/Views/photolistpage.xaml”);
}
//将对象作为参数的命令。
_selectAlbumCommand=newdelegateCommand(this.AlbumSelected);

如果您只想通过
SelectedAlbum命令设置
SelectedAlbum
,为什么不尝试将
SelectedItem
绑定到
SelectedAlbum

<phone:LongListSelector x:Name="AlbumList" ItemsSource="{Binding Albums}" 
 SelectedItem="{Binding SelectedAlbum}" />

显然,您不能为此使用LongListSelector。我不得不把它改成一个列表框,它工作得很好

如果我更努力地搜索,我会发现:


这是:

+1,但在第一个示例中,
SelectedItem
绑定必须具有
Mode=TwoWay
(?)yes。。双向。。我认为LongListSelector的SelectedItem属性的默认值是双向的。。再次指定该选项没有什么坏处,谢谢,但是对象p仍然是空的,因为您更新了CommandParameter的代码。当我将SelectedAlbum直接绑定到SelectedItem时,当我单击一个项目时,什么也没有发生。很好的发现。。我正要向你提出同样的建议
<phone:LongListSelector x:Name="AlbumList" ItemsSource="{Binding Albums}" 
 SelectedItem="{Binding SelectedAlbum}" />
 <i:InvokeCommandAction Command="{Binding DataContext.SelectAlbumCommand, ElementName=ContentPanel}" CommandParameter="{Binding ElementName=AlbumList, Path=SelectedItem}"/>