C#UWP撤消按钮

C#UWP撤消按钮,c#,win-universal-app,undo,C#,Win Universal App,Undo,好的,所以我创建了一个应用程序来管理两个团队的分数。正如你所看到的,我有A队和B队,下面的0表示总得分,而下面的0表示你有每轮得分的历史记录。 当您按下go按钮时,两个文本框中的分数将对所有分数进行相加,并将该轮的分数添加到列表中。 如您所见,我创建了一个撤消按钮。例如,如果我无意中按下了Go按钮,我可以点击我的undo按钮来撤销我的错误。问题是我不知道在撤销按钮的点击事件中要写什么代码 private void Undo_Click(object sender, RoutedEventArgs

好的,所以我创建了一个应用程序来管理两个团队的分数。正如你所看到的,我有A队和B队,下面的0表示总得分,而下面的0表示你有每轮得分的历史记录。 当您按下go按钮时,两个文本框中的分数将对所有分数进行相加,并将该轮的分数添加到列表中。 如您所见,我创建了一个撤消按钮。例如,如果我无意中按下了Go按钮,我可以点击我的undo按钮来撤销我的错误。问题是我不知道在撤销按钮的点击事件中要写什么代码

private void Undo_Click(object sender, RoutedEventArgs e)
    {

    }
注意:我的列表绑定到我创建的类。因此,每个列表通过observablecollection显示它所需的属性

class List
{
    public int ListA { get; set; }
    public int ListB { get; set; }
}
更新:

private void Undo_Click(object sender, RoutedEventArgs e)
    {
        var lastState = Lists.Last();
        int teamAScore, teamBScore, listA, listB;

        // this way i got the Active scores.
        int.TryParse(CurrentScoreA.Text, out teamAScore);
        int.TryParse(CurrentScoreB.Text, out teamBScore);

        // this way i got the last score that i want to remove.
        listA = lastState.ListA;
        listB = lastState.ListB;

        // here i remove the last score from the Active one.
        teamAScore = teamAScore - listA;
        teamBScore = teamBScore - listB;

        // And here i replace my Active score with 
        // the new one that has the last states removed.
        CurrentScoreA.Text = teamAScore.ToString();
        CurrentScoreB.Text = teamBScore.ToString();

        // this one removes the last states of the list
        // so this way i can always remove the last part of my lsit
        // from both my active score and list till i go back to 0.
        Lists.Remove(lastState);
    }
感谢下面回答我问题的两个人,通过阅读并尝试执行,我找到了我的解决方案!!!!:)

我的意思是:

class List
{
    public int ListA { get; set; }
    public int ListB { get; set; }
} 
然后创建两个类列表对象,一个用于操作,另一个用于保持以前的状态(但它会复制您的对象!!!)

按钮将是:

private void Undo_Click(object sender, RoutedEventArgs e)
    {
        ClassListObj1.ListA = ClassListObj2.ListA;
        ClassListObj1.ListB = ClassListObj2.ListB;
    }
甚至,但我不确定

private void Undo_Click(object sender, RoutedEventArgs e)
    {
        ClassListObj1 = ClassListObj2;
    }
记住,您必须执行
ClassListObj2.ListA=ClassListObj1.ListA
ClassListObj2.ListB=ClassListObj1.ListB在修改列表之前

struct的想法更好,但它需要我对你的应用程序有更多的了解,更详细。

我的意思是:

class List
{
    public int ListA { get; set; }
    public int ListB { get; set; }
} 
然后创建两个类列表对象,一个用于操作,另一个用于保持以前的状态(但它会复制您的对象!!!)

按钮将是:

private void Undo_Click(object sender, RoutedEventArgs e)
    {
        ClassListObj1.ListA = ClassListObj2.ListA;
        ClassListObj1.ListB = ClassListObj2.ListB;
    }
甚至,但我不确定

private void Undo_Click(object sender, RoutedEventArgs e)
    {
        ClassListObj1 = ClassListObj2;
    }
记住,您必须执行
ClassListObj2.ListA=ClassListObj1.ListA
ClassListObj2.ListB=ClassListObj1.ListB在修改列表之前

struct的想法更好,但它需要我对你的应用程序有更多的了解,更详细地阐述。

Pano, 您可以创建一个
列表
(sry您的类名没有帮助),每次用户添加分数时,您都会将值保存在列表中,就像保存状态一样。因此,当您单击“撤消”时,将弹出列表中的最后一项,并替换到您的列表中。这里有一个例子

List<List<Score>> ScoreStates = new List<List<Score>>();
List<Score> Scores = new List<Score>();

private void Undo_Click(object sender, RoutedEventArgs e)
{
    var lastState = ScoreStates.Last();
    ScoreStates.Remove(lastState);
    Scores = lastState;
}

public class Score
{
    public int TeamA { get; set; }
    public int TeamB { get; set; }
}
List ScoreStates=新列表();
列表分数=新列表();
私有无效撤消\单击(对象发送方,路由目标)
{
var lastState=ScoreStates.Last();
ScoreStates.Remove(lastState);
分数=最近状态;
}
公开课成绩
{
公共int TeamA{get;set;}
公共int TeamB{get;set;}
}
Pano, 您可以创建一个
列表
(sry您的类名没有帮助),每次用户添加分数时,您都会将值保存在列表中,就像保存状态一样。因此,当您单击“撤消”时,将弹出列表中的最后一项,并替换到您的列表中。这里有一个例子

List<List<Score>> ScoreStates = new List<List<Score>>();
List<Score> Scores = new List<Score>();

private void Undo_Click(object sender, RoutedEventArgs e)
{
    var lastState = ScoreStates.Last();
    ScoreStates.Remove(lastState);
    Scores = lastState;
}

public class Score
{
    public int TeamA { get; set; }
    public int TeamB { get; set; }
}
List ScoreStates=新列表();
列表分数=新列表();
私有无效撤消\单击(对象发送方,路由目标)
{
var lastState=ScoreStates.Last();
ScoreStates.Remove(lastState);
分数=最近状态;
}
公开课成绩
{
公共int TeamA{get;set;}
公共int TeamB{get;set;}
}

理论上,您只需在单击处理程序中添加一行,记录执行的操作(甚至是执行的操作的运行队列)。单击“撤消”时,您只需反转存储的操作即可。然后,“撤消”应将所有项返回到以前的状态。。。这可以通过两种方式实现(可能更多):1。保留列表的先前状态,将列表复制到临时列表并保存到其中,然后再进行任何更改。。。但这可能会增加资源的使用。2.保留一个las mod变量,该变量允许您在列表上应用相反的操作,例如包含所有可能更改的struc更改,并存储最后一个完成的操作。理论上,您只需在单击处理程序中添加一行,记录执行的操作(甚至是正在运行的操作队列)。单击“撤消”时,您只需反转存储的操作即可。然后,“撤消”应将所有项返回到以前的状态。。。这可以通过两种方式实现(可能更多):1。保留列表的先前状态,将列表复制到临时列表并保存到其中,然后再进行任何更改。。。但这可能会增加资源的使用。2.保留一个las mod变量,它允许您在列表上应用相反的操作,比如包含所有可能更改的struc更改,并存储最后一个完成的更改。如何创建这些ClassListObj1我有点困惑。那么我应该在public int ListA{get;set;}之前添加什么呢??因为我得到了这个想法,所以我在一个列表上操作,而另一个列表有一步后退,在那之后,要撤消,我将只将列表中的项目更改为ObjList上的项目,该项目落后于右一步?
list ClassListObj1=new list()是类列表的一个实例。问题:列表不是保留字吗?您可能需要更改类的名称;)是的,我得到了你的想法,可能是名字破坏了执行:P但是通过阅读你的想法和其他答案,我发现了很多方法:)我会发布我的更新代码@DIEGO Carrascali我该如何创建这些ClassListObj1我有点困惑。那么我应该在public int ListA{get;set;}之前添加什么呢??因为我得到了这个想法,所以我在一个列表上操作,而另一个列表有一步后退,在那之后,要撤消,我将只将列表中的项目更改为ObjList上的项目,该项目落后于右一步?
list ClassListObj1=new list()是类列表的一个实例。问题:列表不是保留字吗?您可能需要更改类的名称;)是的,我得到了你的想法,可能是名字破坏了执行:P但是通过阅读你的想法和其他答案,我发现了很多方法:)我会发布我的更新代码@DIEGO CARRASCALOkay使用您的想法我找到了如何做我将更新我的代码以便ppl可以获得想法thnx:)好的使用您的想法我会