@INTERNALINTERFERENCE

Как правильно обновить свойства?

Здравствуйте, проблема в следующем:
Пытаюсь реализовать дерево ( просто список, который разворачивается ). Не получается правильно обновлять данные - все как-то мигает. Есть шанс, что данные сначала появляются, а потом исчезают, что и влияет на мигание.
Вот мой код:
private Node? _selectedItem;                                                           
private Node? _selectedItemUpdate;                                                     
private DateTime _dateUpdated;                                                         
private Node TreeRoot { get; }                                                         
                                                                                       
public Node? SelectedItem                                                              
{                                                                                      
    get => _selectedItemUpdate;                                                        
    set                                                                                
    {                                                                                  
        _selectedItemUpdate = value;                                                   
        if ( value != null && ( value != _selectedItem                                 
                                || _dateUpdated != _selectedItem.Details.Timestamp ) ) 
        {                                                                              
            _selectedItem = value;                                                     
            SetAndRaise( ref _selectedItemUpdate, null );                              
            SetAndRaise( ref _selectedItemUpdate, value );                             
            _dateUpdated = value.Details.Timestamp;                                    
        }                                                                              
    }                                                                                  
}


А вот SetAndRaise:
public void SetAndRaise<T>( ref T field, T newValue, [CallerMemberName] string? name = null )
{                                                                                            
    if ( !Equals( field, newValue ) )                                                        
    {                                                                                        
        field = newValue;                                                                    
        PropertyChanged?.Invoke( this, new PropertyChangedEventArgs( name ) );               
    }                                                                                        
}


Вот репозиторий, можно потестить и увидеть, что именно не работает. Очень прошу помочь, потому что я в упор не вижу ошибку
  • Вопрос задан
  • 39 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Sumor
SetAndRaise( ref _selectedItemUpdate, null ); лишний. У вас при каждой установке выделенного элемента возникает событие сброса этого выделения, а затем установки - и так по кругу.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы