2013-03-09 4 views
0

Я делаю простую UndoRedo Framework, используя Stacks, но по какой-то причине что-то не работает. У меня есть этот код, чтобы сохранить свойство объекта, в данном случае ColorBlendUndo Redo Stack

public static ColorBlend _BG_Blend = new ColorBlend(); 
public ColorBlend BG_Blend 
{ 
    get { return _BG_Blend; } 
    set 
    { 
     AddLog("BG_Blend", _BG_Blend); //Name && Property Value 
     _BG_Blend = value;     
    } 
} 

Теперь каждый раз, когда я меняю смесь это сохраняет новое свойство в стеке и посылает сигнал о том, что новое действие может быть отменено. Если у вас есть 5 разных ColorBlends в журнале, когда я нажимаю Undo, он возвращает сохраненные свойства, но все они имеют одинаковые цвета, позиционируют все. Кто-нибудь знает почему?

+1

Вам нужно будет показать всю вашу реализацию. Мы не можем догадаться, в чем проблема, только с парами строк кода. –

+0

Что вы имеете в виду? Это одно: http://www.codeproject.com/Articles/19550/Automated-Undo-Redo-library-Csharp-Generics-NET-C? – andri

ответ

1

Проблема в том, что вы всегда сохраняете одну и ту же ссылку на объект в своем стеке (а именно _BG_Blend), что означает, что каждая запись в вашем стеке указывает на один и тот же объект, а точнее на объект, который вы вставляли последним. Для каждой смеси вы должны сохранить новую ссылку.

1

В инкубаторе назначение

_BG_Blend = value;     

в поглотителе возврат

return _BG_Blend; 

Так что, да, вы не получите последнее установленное значение независимо от того, что в вашем стеке.

Похоже, что в геттере вам нужно вернуть значение из стека, а не значение поля поддержки.

+0

, который выполняется с помощью UndoRedoFramework каждый раз, когда один из стеков изменяет, он обновляет объект parrent – Adrao

+2

@ user2147134, так что, возможно ... вы покажете нам весь свой код и как вы его используете? наш хрустальный шар офф-лайн с понедельника. – gdoron

3

Если вы указали BG_Blend и сохраните ссылку на него в стеке, все ваши ссылки в стеке будут указывать на один и тот же экземпляр. Вам нужно создать новый экземпляр, когда вы храните его в стеке. Сделайте копию ColorBlend, прежде чем он будет изменен, и сохраните копию в стеке.

0

Ваша переменная-член _BG_Blend равна static, поэтому существует только один экземпляр этого элемента. Каждый раз, когда вы нажимаете новую смесь, вы перезаписываете статическую переменную с новым значением, но поскольку все ваши шаги отмены только указывают на это одно общее значение, все они получают «перезаписываются» им.

Просто удалите модификатор static.