Ссылка на значение родителя из дочернего элемента - PullRequest
3 голосов
/ 20 марта 2019

Я пытаюсь найти более элегантный способ установить свойство родителя в c #. В настоящее время я передаю родительский элемент в дочерний элемент и ссылаюсь на него таким образом Это кажется громоздким и, возможно, даже неправильным.

Ребенок:

 public class ValidatedField<T>
    {
        public OpenIssues parent { get; set; } 
        //Other values
        public void Highlight()
        {
            parent.isNotValid = true;
            isHighlighted = true;
        }
    }

И Родитель:

public class OpenIssues
{
    public OpenIssues()
    {
        DateAppealFiled = new ValidatedField<DateTime?>(this);
    }
    public bool isNotValid { get; set; }
    public ValidatedField<DateTime?> DateAppealFiled { get; set; }
}

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

1 Ответ

3 голосов
/ 20 марта 2019

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

Весь родитель (по вашим словам) - всего несколько байтов ссылки / указателя

Однако

Вы можете сделать это одним из 3 способов

  1. Передайте конкретную ссылку или интерфейс от вашего родителя.
  2. Используйте события / делегат / действие и зарегистрируйтесь, а затем активируйте их при обновлении
  3. Или разделенная система пабов / подчиненных сообщений или посредник

То, что вы делаете, прекрасно, хотя у всех есть свои недостатки и по-разному громоздки

Самый современный подход - это система обмена сообщениями без связи, это часто встречается в моделях представления, где вы не хотите соединять модели просмотра и классы вместе. Тем не менее, это, скорее всего, излишне для тривиальных ситуаций.

Также у действий и событий есть свои места. Родитель (или кто-то) подписывается, и отписывается (хорошо ... должен).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...