我知道這是一個很長的項目,但請耐心等待。在Windows App Store中迭代所選項目Gridview
我創建了一個Windows應用程序商店程序,它非常類似於使用MVVM輕型框架的MVVM光源樣本中的Laurent Bugnion的「MyFriends」程序。
在他的程序中,他使用gridview的SelectedItem屬性來跟蹤哪個項目是選定的項目。
問題是,我讓用戶能夠選擇GridView上的多個項目,然後使用應用程序欄上的按鈕對它們進行操作。對於此SelectedItem不起作用。
有誰知道如何使這個工作與多選GridView?我已經嘗試了基於WPF上的一些文章的GridViewItem的IsSelected屬性,但這似乎不工作。 SelectedTimesheets getter在調用時總是返回空。以下是我迄今爲止:
MainPage.xaml中(綁定到一個孩子TimesheetViewModel觀察到的集合MainViewModel):
<GridView
x:Name="itemGridView"
IsItemClickEnabled="True"
ItemsSource="{Binding Timesheets}"
ItemTemplate="{StaticResource TimesheetTemplate}"
Margin="10"
Grid.Column="0"
SelectionMode="Multiple"
helpers:ItemClickCommand.Command="{Binding NavigateTimesheetCommand}" RenderTransformOrigin="0.738,0.55" >
<GridView.ItemContainerStyle>
<Style TargetType="GridViewItem">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
</Style>
</GridView.ItemContainerStyle>
</GridView>
MainViewModel(從全碼砍下):
public class MainViewModel : ViewModelBase
{
private readonly IDataService _dataService;
private readonly INavigationService _navigationService;
/// <summary>
/// Initializes a new instance of the MainViewModel class.
/// </summary>
public MainViewModel(IDataService dataService, INavigationService navigationService)
{
_dataService = dataService;
_navigationService = navigationService;
Timesheets = new ObservableCollection<TimesheetViewModel>();
ExecuteRefreshCommand();
}
public ObservableCollection<TimesheetViewModel> Timesheets
{
get;
private set;
}
public IEnumerable<TimesheetViewModel> SelectedTimesheets
{
get { return Timesheets.Where(o => o.IsSelected); }
}
private async void ExecuteRefreshCommand()
{
var timesheets = await _dataService.GetTimesheets("domain\\user");
if (timesheets != null)
{
Timesheets.Clear();
foreach (var timesheet in timesheets)
{
Timesheets.Add(new TimesheetViewModel(timesheet));
}
}
}
}
TimesheetViewModel:
public class TimesheetViewModel: ViewModelBase
{
public bool IsSelected { get; set; }
public Timesheet Model
{
get;
private set;
}
public TimesheetViewModel(Timesheet model)
{
Model = model;
}
}
如果我手動設置IsSelected屬性, SelectedTimesheets lambda起作用,所以問題在於XAML與IsSelected屬性的綁定中。
任何幫助,將不勝感激。
我知道這是很久以前發佈的,但我想知道一些事情:1)如果您創建從GridView繼承的自定義GridView,是否沒有將GridView控件實現爲GridView控件的一部分的方法? 2)在視圖模型中觸發SelectionCommand時,如果使用JerryNixon-MSFT發佈的方法,它似乎總是被觸發,但所選項目的總數不正確。它似乎總是選擇一個落後。有任何想法嗎? – Thierry