2016-03-08 2 views
1

Итак, я создал приложение для управления счетом для 2 команд. APP Layout. Как вы можете видеть, у меня есть команда A и Team B, 0 ниже добавляет очки для общего балла, а ниже у вас есть история того, в каких точках заработал каждый раунд. , когда вы нажимаете кнопку go, точки из 2 текстовых полей идут на добавление для всего балла и добавляют точки этого раунда в списки. Как вы можете видеть, я создал кнопку «Отменить». поэтому, если, например, я нажимаю кнопку Go случайно, я могу просто нажать на кнопку отмены, чтобы отменить кнопку, чтобы отменить мою ошибку. Дело в том, что я не знаю, какой код писать в событии клика кнопки отмены.Кнопка отмены C# UWP

private void Undo_Click(object sender, RoutedEventArgs e) 
    { 

    } 

Примечание: мои списки привязаны к классу i. поэтому каждый список отображает свойство, которое ему нужно, через наблюдаемое объединение.

class List 
{ 
    public int ListA { get; set; } 
    public int ListB { get; set; } 
} 

UPDATE:

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); 
    } 

Thnx много для 2-х парней, которые ответили на мои вопросы ниже, и, читая их и пытается выполнить их я нашел свое решение !!!! :)

+1

В теории вам просто нужно добавить строку обработчикам кликов, которые регистрируют, какое действие было выполнено (или даже запущена очередь выполняемых действий). Когда отменяется щелчок, вы просто отбрасываете все сохраненные действия. –

+0

Undo должен вернуть все элементы в предыдущее состояние ... Это можно сделать двумя способами (возможно, больше): 1. Сохранять предыдущее состояние списков, копировать списки во временный список и сохранять их в нем, прежде чем делать какие-либо изменения ... но это может сильно пострадать от использования ресурсов. 2. Сохраните переменную mod las, которая позволит вам применить противоположное действие в списке, что-то вроде изменения структуры, которое включает в себя все возможные изменения, и сохранить последнее сделанное. –

ответ

0

Pano, Вы можете создать List<List<List>> (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; } 
} 
+0

Хорошо, используя вашу идею, я нашел, как это сделать, я обновлю свой код, чтобы ppl мог получить идею thnx :) – panoukos41

0

Что я имел в виду,:

class List 
{ 
    public int ListA { get; set; } 
    public int ListB { get; set; } 
} 

Затем вы создаете 2 объекты класса List один оперировать, а другой держать как предыдущее состояние (но это дублировать объекты !!!)

и кнопка будет:

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;.

Идея с структурой лучше, но для этого требуется, чтобы я больше узнал о вашем приложении, чтобы уточнить.

+0

Как бы я создал этот ClassListObj1, я немного смутился. так что я должен добавить перед public int ListA {get; задавать; } ?? Потому что у меня есть идея, поэтому я работаю в одном списке, а другой - на 1 шаг назад, после этого, чтобы отменить, я просто изменю элементы из списка, чтобы быть элементами в ObjList, который на 1 шаг ниже справа? – panoukos41

+0

'List ClassListObj1 = new List();' является экземпляром вашего списка классов. Вопрос: не перечислил ли зарезервированное слово? Возможно, вам нужно будет изменить название класса;) –

+0

да, я получил вашу идею, возможно, имя уничтожило выполнение: P , но, читая вашу идею, и другой ответ, я нашел, как это сделать thnx много :) я опубликую мой обновленный код. @DIEGO CARRASCAL – panoukos41

Смежные вопросы