Member 11841791 Ответов: 2

Чистый способ проверить, было ли изменено свойство объекта в списке?


Эй Codeproject,

У меня есть класс под названием UIControl, и я также сделал производный класс, такой как UIControlButton, UIControlImageBox. Я сохранил все это в списке "uicontrol".

Есть ли какой-нибудь способ проверить, были ли внесены какие-либо изменения в объекты в списке, которые не просто добавили или удалили объект?

Я действительно хочу убедиться, что нет более чистого способа проверить, были ли внесены какие-либо изменения, чем сравнивать все свойства каждый раз, когда они устанавливаются в каждом отдельном классе.

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

с уважением,
- ЭЦП.

Что я уже пробовал:

Я пробовал делать грязный метод, просто сравнивая один список с другим списком, один из которых содержит объекты, пока они не изменены, и тот, который может быть изменен, сравнивая эти объекты и в случае, если они отличаются, устанавливая старый элемент на новый элемент и вызывая событие, подобное этому:

public bool IsIdentical(UIControl Control, UIControl Other)
{
    if(Control.GetType() != Other.GetType())
    {
        return false;
    }

    if(!Control.Name.Equals(Other.Name))
    {
        return false;
    }

    return false;
}


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

#realJSOP

Вы используете WPF? И кстати, "контроль" - ужасное название для переменной. Используйте "ctrl" или что-то в этом роде.

Member 11841791

Очень конкретно я использую Monogame (альтернативу XNA.) Я работаю над движком пользовательского интерфейса, и мне нужно зарегистрироваться, когда были внесены изменения в элементы управления, чтобы сделать рисунок более эффективным в панелях. Примером изменений может служить размер элемента управления, текст в элементе управления,цвета и вперед.

2 Ответов

Рейтинг:
2

Peter Leow

Возможно, вы захотите исследовать INotifyPropertyChanged Интерфейс (System.ComponentModel)[^]


Member 11841791

Теперь это больше похоже на правду. Неужели нет другого способа без необходимости поднимать событие в каждом свойстве? Если нет, то это не проблема, я просто буду работать с этим.

Peter Leow

Действуй.

Member 11841791

Я попробую. Ура, Питер!

Karthik_Mahalingam

5! точно.

Рейтинг:
1

#realJSOP

В большинстве случаев есть событие, с которым вы можете справиться, которое зависит от типа элемента управления. Текстовые поля в окна TextChanged события, списки имеют SelectionChanged, прием.