길었습니다. 알고 싶지만 나와 함께하시기 바랍니다.Windows App Store에서 선택한 항목 반복 Gridview
MVVM 라이트 프레임 워크를 사용하여 MVVM 라이트 샘플의 Laurent Bugnion의 "MyFriends"프로그램과 매우 유사한 Windows 앱 스토어 프로그램을 만들었습니다.
그는 자신의 프로그램에서 gridview의 SelectedItem 속성을 사용하여 어떤 항목이 선택된 항목인지 추적합니다.
문제는 사용자가 GridView에서 여러 항목을 선택한 다음 응용 프로그램 모음의 단추를 사용하여 작업 할 수 있다는 것입니다. 이를 위해 SelectedItem은 작동하지 않습니다.
누구든지 다중 선택 GridView에서이 작업을 수행하는 방법을 알고 있습니까? WPF의 일부 기사를 기반으로 GridViewItem의 IsSelected 속성을 시도했지만 작동하지 않는 것 같습니다. SelectedTimesheets getter는 호출 될 때 항상 비어있게됩니다.
<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));
}
}
}
}
에서 MainPage.xaml이 (아이 TimesheetViewModel 관찰 수집과 MainViewModel에 바인딩) : 여기에 지금까지 무엇을 가지고
TimesheetViewModel :
public class TimesheetViewModel: ViewModelBase
{
public bool IsSelected { get; set; }
public Timesheet Model
{
get;
private set;
}
public TimesheetViewModel(Timesheet model)
{
Model = model;
}
}
내가 수동에 isSelected 속성을 설정하면, SelectedTimesheets 람다가 작동하므로 문제는 XAML을 IsSelected 속성에 바인딩하는 것입니다.
도움을 주시면 감사하겠습니다.
꽤 오래 전 게시되었지만 몇 가지 사항에 대해 궁금합니다. 1) GridView에서 상속 한 사용자 지정 그리드 뷰를 만드는 경우 GridView 컨트롤의 일부로이 기능을 구현할 방법이 없습니까? 2) SelectionCommand가 viewmodel에서 트리거되면 JerryNixon-MSFT가 게시 한 메소드를 사용하면 항상 선택된 항목의 총 수가 잘못 표시됩니다. 선택은 항상 뒤떨어져있는 것 같습니다. 어떤 아이디어? – Thierry