0

SelectedDay の Date プロパティの値に基づいて、ListCollectionView 内の特定の項目に移動しようとしています。

VM

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と一致させたいので、内部のアイテムの一致する場所のアイテムに移動できます。Date<ShootingDay>ShootingDayInfoListSelectedDay.DateDateShootingDayInfoList

これを試しましたが、選択したアイテムが同じオブジェクトの一部ではないため、機能しません。

ShootingDayInfoList.MoveCurrentTo(SelectedDay.Date);

どうすればこれを機能させることができますか?私はこれらすべてに非常に慣れていません。

4

1 に答える 1

1

必要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、正常に動作しています。このアプローチは、既存のコードには影響しません。

2番目のアプローチ、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); 
于 2015-12-23T08:04:27.177 に答える