我正在努力解决一个问题:我有一个像这样的LonglistSelector:
<phone:LongListSelector Name="ListContacts"
ItemsSource="{Binding GroupedPeople}"
JumpListStyle="{StaticResource LongListSelectorJumpListStyle}"
GroupHeaderTemplate="{StaticResource LongListSelectorGroupHeaderTemmplate}"
ItemTemplate="{StaticResource LongListSelectorItemTemplate}"
HideEmptyGroups ="True" IsGroupingEnabled ="true" LayoutMode="List">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Tap">
<mvvmlight:EventToCommand Command="{Binding ListContactsTapCommand, Mode=OneTime}" CommandParameter="{Binding ElementName=ListContacts, Path=SelectedItem}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</phone:LongListSelector>
这与此链接中的PeopleHub非常相似:http://code.msdn.microsoft.com/wpapps/PeopleHub-Windows-Phone-80-88abe94d
我的问题在于点击事件。当我第一次点击一封信时,一切都按预期发生。然后,我点击一个联系人以查看更多信息,这一切都很好。
当我再次单击该字母时会出现问题,因为tap事件被触发两次(我认为):一个因为SelectedItem不为null而另一个则显示该字母。
在我的ViewModel中,我有这个:
public RelayCommand<Contact> ListContactsTapCommand { get; private set; }
.....
this.ListContactsTapCommand = new RelayCommand<Contact>(contact => ShowContactInformation(contact), contact => contact != null);
private void ShowContactInformation(Contact c)
{
ServiceLocator.Current.GetInstance<ContactInfoViewModel>().ContactInfo = c;
_navigationService.NavigateTo(new Uri(ViewModelLocator.ContactInfoPage, UriKind.Relative));
}
我认为可能解决方案是重置SelectedItem,或者然后知道我在哪里挖掘。
任何人都可以伸出援手吗? 提前谢谢。
此致
答案 0 :(得分:0)
以一种我不完全同意的方式解决了我的问题...并且它“打破”mvvm模式一点
这就是我所做的
查看:
<mvvmlight:EventToCommand Command="{Binding ListContactsTapCommand, Mode=OneTime}" CommandParameter="{Binding ElementName=ListContacts}"/>
视图模型:
this.ListContactsTapCommand = new RelayCommand<LongListSelector>(param => ShowContactInformation(param), param => param.SelectedItem != null);
private void ShowContactInformation(LongListSelector c)
{
ServiceLocator.Current.GetInstance<ContactInfoViewModel>().ContactInfo = c.SelectedItem as Contact;
_navigationService.NavigateTo(new Uri(ViewModelLocator.ContactInfoPage, UriKind.Relative));
c.SelectedItem = null;
}
我不同意这种方法的原因是因为ViewModel必须知道来自视图的对象......这是不可能的,但由于LonglistSelector不允许Binding到SelectedItem,这是我带来的解决方案。
如果你们有任何其他观点......我会很高兴知道它:)
提前再次感谢。