2013-12-04 13 views
1

У меня есть проект, который использует CSLA 3.0.2.Как вы получаете событие CSLA 3.02 BusinessListBase ListChanged для идентификации дочернего объекта, чья функция OnPropertyChanged инициировала событие?

У меня есть объект коллекции BusinessListBase, который имеет дочерние элементы, которые имеют свойство IsDefault.

Когда дочерний объект имеет свойство IsDefault, равное true, я хочу установить для свойства дочернего элемента IsDefault значение false.

Я вызываю OnPropertyChanged («IsDefault») в дочернем сеттере, и у меня есть то, что воссоздает событие ListChanged. Однако отправителем события является объект Collection, а не дочерний объект, который поднял событие. Не является дочерним элементом в ListChangedEventArgs (e).

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

Или я должен делать это по-другому? Как получить ссылку на родителя в дочернем сеттере и сделать это там?

Любая помощь приветствуется.

ответ

1

Я начал с CSLA на 3.6, но я думаю, что это будет работать в CSLA 3:

Вы должны найти есть OnChildChanged метод можно переопределить в классе коллекции BusinessListBase. Этот метод имеет параметр Csla.Core.ChildChangedEventArgs, который содержит ссылку на дочерний объект, который изменился, и какое свойство объекта, которое оно изменило.

Затем вы можете зациклить других детей в коллекции в этом методе, чтобы установить их в IsDefault = false.

protected override void OnChildChanged(Csla.Core.ChildChangedEventArgs e) 
{ 
    base.OnChildChanged(e); 

    switch (e.PropertyChangedArgs.PropertyName) 
    { 
     case "IsDefault": 

      if (((ChildObjectType)e.ChildObject).IsDefault == true) 
      { 
       // then loop all the other childern 
       foreach (ChildObjectType child in this) 
       { 
        if (child != e.ChildObject && child.IsDefault == true) 
        { 
         child.IsDefault = false; 
        } 
       } 
      } 
      break; 
    } 

} 

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

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

  • Нет связанных вопросов^_^