【发布时间】:2016-11-02 06:35:59
【问题描述】:
我创建了一个 ListView,其中每个单元格都有自己的图像。 单击图像时,会触发我的命令,并到达 ViewModel 中的方法“OpenImageAsync”,但未更新 SelectedItem。它始终为 NULL。 我试图遵循本指南,但没有运气。 http://rasmustc.com/blog/Image-Gallery-With-Xamarin-Forms/
Xaml
<ListView
x:Name="ListViewName"
ItemsSource="{Binding PollStatistics}"
SelectedItem="{Binding SelectedPollStatistic}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Image
Source="{Binding Image, Converter={StaticResource ByteArrayToImage}}">
<Image.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding Path=BindingContext.OpenImageCommand, Source={x:Reference EndPageContentPage}}"
CommandParameter="Image" />
</Image.GestureRecognizers>
</Image>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Xaml.cs
public partial class EndPage : BaseContentPage
{
public EndPage(INavigation navigation, User user)
{
InitializeComponent();
this.BindingContext = new EndPageViewModel(navigation, user);
}
}
视图模型
public class EndPageViewModel : BaseViewModel, IIsLoadSpinnerRunning
{
private readonly INavigation _navigation;
private readonly User _user;
private readonly PollStatisticManager _pollStatisticManager = PollStatisticManager.DefaultManager;
private ObservableCollection<PollStatisticDTO> _pollStatistics;
private PollStatisticDTO _selectedPollStatistic;
public EndPageViewModel(INavigation navigation, User user)
{
this._navigation = navigation;
this._user = user;
OpenImageCommand = new Command(async () => await OpenImageAsync());
PollStatistics = await _pollStatisticManager.GetPollStatisticsForSessionAsync(sessionData);
}
public ObservableCollection<PollStatisticDTO> PollStatistics
{
get
{
return _pollStatistics;
}
set
{
_pollStatistics = value;
OnPropertyChanged("PollStatistics");
}
}
public PollStatisticDTO SelectedPollStatistic
{
get
{
return _selectedPollStatistic;
}
set
{
_selectedPollStatistic = value;
OnPropertyChanged("SelectedPollStatistic");
}
}
public ICommand OpenImageCommand { get; set; }
private async Task OpenImageAsync()
{
if (SelectedPollStatistic != null)
{
await _navigation.PushModalAsync(new ImageModalPage(_navigation, SelectedPollStatistic.Image));
}
}
}
【问题讨论】:
-
你可能应该利用那里的
CommandParameter;) -
如 CommandParameter="{Binding SelectedPollStatistic}" ?
-
我不确定,但你试过
Mode=TwoWay吗? -
是的,如果你绑定一些值来标识你可以用来进一步导航的对象,那么就是这样!它将作为参数提供给您的
Command方法 -
@EgorGromadskiy - TapGesture 没有 Mode 属性。
标签: listview command xamarin.forms selecteditem