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