导航到 ListCollectionView 中的特定项目
Navigate to a specific item inside ListCollectionView
我正在尝试根据 SelectedDay 的日期 属性 的值导航到 ListCollectionView 中的特定项目。
虚拟机
private Day _selectedDay;
public Day SelectedDay // the Name property
{
get { return _selectedDay; }
set { _selectedDay = value; RaisePropertyChanged(); }
}
public ObservableCollection<ShootingDay> AllShootingDayInfo {get; set;}
private ListCollectionView _shootingDayInfoList;
public ListCollectionView ShootingDayInfoList
{
get
{
if (_shootingDayInfoList == null)
{
_shootingDayInfoList = new ListCollectionView(AllShootingDayInfo);}
return _shootingDayInfoList;
}
set
{
_shootingDayInfoList = value; RaisePropertyChanged();
}
}
<Day>
对象具有 Date
的 属性,我希望它与 <ShootingDay>
中的 Date
属性 相匹配对象,以便我可以导航到 ShootingDayInfoList
中的项目,其中 SelectedDay.Date
与 ShootingDayInfoList
中项目的 Date
相匹配。
我已经试过了,但这不起作用,因为所选项目不是同一对象的一部分。
ShootingDayInfoList.MoveCurrentTo(SelectedDay.Date);
我怎样才能完成这项工作?我对这一切都很陌生。
您需要 Filter
谓词来获取所需的项目,然后删除 Filter
以恢复所有项目。
代码
ViewModel vm = new ViewModel();
System.Diagnostics.Debug.WriteLine(vm.ShootingDayInfoList.Count.ToString());
vm.SelectedDay.Date = DateTime.Parse("12/25/2015");
vm.ShootingDayInfoList.Filter = (o) =>
{
if (((ShootingDay)o).Date.Equals(vm.SelectedDay.Date))
return true;
return false;
};
ShootingDay foundItem = (ShootingDay)vm.ShootingDayInfoList.GetItemAt(0);
vm.ShootingDayInfoList.Filter = (o) => { return true; };
vm.ShootingDayInfoList.MoveCurrentTo(foundItem);
我已经使用 MoveCurrentToNext() method
检查了代码,它工作正常。
这种方法不会影响您现有的代码。
第二种方法,直接使用AllShootingDayInfo
或使用SourceCollection
属性获取底层Collection
:
ViewModel vm = new ViewModel();
System.Diagnostics.Debug.WriteLine(vm.ShootingDayInfoList.Count.ToString());
vm.SelectedDay.Date = DateTime.Parse("12/23/2015");
IEnumerable<ShootingDay> underlyingCollection = ((IEnumerable<ShootingDay>)vm.ShootingDayInfoList.SourceCollection);
ShootingDay d1 = underlyingCollection.FirstOrDefault(dt => dt.Date.Equals(vm.SelectedDay.Date));
vm.ShootingDayInfoList.MoveCurrentTo(d1);
我正在尝试根据 SelectedDay 的日期 属性 的值导航到 ListCollectionView 中的特定项目。
虚拟机
private Day _selectedDay;
public Day SelectedDay // the Name property
{
get { return _selectedDay; }
set { _selectedDay = value; RaisePropertyChanged(); }
}
public ObservableCollection<ShootingDay> AllShootingDayInfo {get; set;}
private ListCollectionView _shootingDayInfoList;
public ListCollectionView ShootingDayInfoList
{
get
{
if (_shootingDayInfoList == null)
{
_shootingDayInfoList = new ListCollectionView(AllShootingDayInfo);}
return _shootingDayInfoList;
}
set
{
_shootingDayInfoList = value; RaisePropertyChanged();
}
}
<Day>
对象具有 Date
的 属性,我希望它与 <ShootingDay>
中的 Date
属性 相匹配对象,以便我可以导航到 ShootingDayInfoList
中的项目,其中 SelectedDay.Date
与 ShootingDayInfoList
中项目的 Date
相匹配。
我已经试过了,但这不起作用,因为所选项目不是同一对象的一部分。
ShootingDayInfoList.MoveCurrentTo(SelectedDay.Date);
我怎样才能完成这项工作?我对这一切都很陌生。
您需要 Filter
谓词来获取所需的项目,然后删除 Filter
以恢复所有项目。
代码
ViewModel vm = new ViewModel();
System.Diagnostics.Debug.WriteLine(vm.ShootingDayInfoList.Count.ToString());
vm.SelectedDay.Date = DateTime.Parse("12/25/2015");
vm.ShootingDayInfoList.Filter = (o) =>
{
if (((ShootingDay)o).Date.Equals(vm.SelectedDay.Date))
return true;
return false;
};
ShootingDay foundItem = (ShootingDay)vm.ShootingDayInfoList.GetItemAt(0);
vm.ShootingDayInfoList.Filter = (o) => { return true; };
vm.ShootingDayInfoList.MoveCurrentTo(foundItem);
我已经使用 MoveCurrentToNext() method
检查了代码,它工作正常。
这种方法不会影响您现有的代码。
第二种方法,直接使用AllShootingDayInfo
或使用SourceCollection
属性获取底层Collection
:
ViewModel vm = new ViewModel();
System.Diagnostics.Debug.WriteLine(vm.ShootingDayInfoList.Count.ToString());
vm.SelectedDay.Date = DateTime.Parse("12/23/2015");
IEnumerable<ShootingDay> underlyingCollection = ((IEnumerable<ShootingDay>)vm.ShootingDayInfoList.SourceCollection);
ShootingDay d1 = underlyingCollection.FirstOrDefault(dt => dt.Date.Equals(vm.SelectedDay.Date));
vm.ShootingDayInfoList.MoveCurrentTo(d1);