我知道这很长,但请多多包涵。
我使用 MVVM 灯光框架在 MVVM 灯光示例中创建了一个与 Laurent Bugnion 的“MyFriends”程序非常相似的 Windows 应用商店程序。
在他的程序中,他使用 gridview 的 SelectedItem 属性来跟踪哪个项目是选定项目。
问题是,我让用户能够在 GridView 上选择多个项目,然后使用 App Bar 上的按钮对它们进行操作。对于这个 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));
}
}
}
}
时间表视图模型:
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 属性的绑定中。
任何帮助,将不胜感激。