1

我正在尝试根据用户是否单击“前进”按钮或“后退”按钮来提供一种算法来设置当前对象的代码。

public Step CurrentStep
{
    get { return _currentStep; }
    set
    {
        if (_currentStep != value)
        {
            _currentStep = value;
            OnPropertyChanged("CurrentStep");
        }
    }
}

private int CurrentStepIndex { get; set; }

private void NextStep()
{
    CurrentStepIndex++;
    GotoStep();
}

private void PreviousStep()
{
    CurrentStepIndex--;
    GotoStep();
}

private void GotoStep()
{
    var query = from step in CurrentPhase.Steps
                where ????
                select step;

    CurrentStep = query.First();
}

CurrentPhase.Steps是一个ObservableCollection<Step> Steps {get; set;}。在这个类的构造函数中,我有一种方法可以为属性“ CurrentStep”设置一个默认值,所以总会有一个可以跳出的。

鉴于这个集合,我希望使用CurrentStep存储在CurrentStepIndex其中的对象的索引来查找该项目在集合中的位置,然后通过递减或递增来更改该索引。然后,使用某种 linq 查询,在新索引处找到“下一步”。

不幸的是,我很难制定我的 LINQ 查询。更重要的是,我不确定这个算法是否会起作用。

我需要什么来完成我的 LINQ 查询才能使该算法起作用?

或者,有没有更好的方法来实现我想要的?

4

2 回答 2

1

使用以下但确保控制溢出

  if(CurrentStepIndex>=0 && CurrentStepIndex<CurrentPhase.Steps.Count)
  {
   CurrentStep= CurrentPhase.Steps[CurrentStepIndex)
  }
于 2013-04-19T20:54:19.373 回答
1

这里没有必要使用 LINQ。ObservableCollection<T>继承自具有Items属性的Collection<T>(C# 中的索引器)。这意味着您可以使用以下代码而不是 LINQ:

private void GotoStep()
{
    CurrentStep = CurrentPhase.Steps[CurrentStepIndex];
}
于 2013-04-19T21:00:36.367 回答