문제

외부 소스에서 특정 엔티티가 현재 데이터 콘텍스트 외부에서 변경되었다는 정보를 받고있는 상황에 처해 있습니다. 엔티티를 찾아서 새로 고칠 수 있습니다.

MyDataconText.Refresh (ComphroysMode.OverWriteCurrentValues, myentity);

엔티티에서 변경된 속성이 올바르게 업데이트됩니다. 그러나 새로 고침이 발생할 때 inotifypropertychanging inotifypropertychanged가 올라가는 것처럼 보이며 UI가 잘못된 정보를 표시합니다.

Refresh ()가 엔티티의 올바른 속성 게터와 세터를 사용하여 변경 알림 이벤트를 제기하지 못하지만 같은 것을 달성 할 수있는 또 다른 방법이 있습니까?

내가 뭔가 잘못하고 있습니까? 새로 고침보다 더 나은 방법이 있습니까? 새로 고침이 유일한 옵션이라면 누구든지 작업이 있습니까?

도움이 되었습니까?

해결책

비슷한 문제가있었습니다. TreeView에 구속력이 있었고 편집 작업을 취소하는 사용자에 대한 응답으로 새로 고침을 호출해야했습니다. 그만큼 Refresh() 메소드는 순종적으로 모든 원래 값을 다시 넣지 만 TreeView UI에 반영되지 않았습니다. 전능하신 Google과상의 한 후이 솔루션을 발견했습니다.

CollectionViewSource.GetDefaultView(treeViewClusters.ItemsSource).Refresh();

이것은 내 TreeView가 모든 것을 업데이트하도록 강요하는 것 같습니다. 유일한 단점 (그리고 꽤 주요한 단점)은 모든 트리 노드를 무너 뜨리는 것처럼 보이며, 이로 인해 사용자가 자리를 잃게된다는 것입니다. 나는 내 것을 잘 설정할 수있었습니다 ItemsSource 널로 뒤로 돌아 가기 위해 ... 동일한 효과이지만,이 방법은 모든 텍스트 상자 나 무언가가 있으면 단 하나의 텍스트 상자가 있으면 더 간단합니다.

이것보다 더 나은 솔루션이 있습니까?

편집 : 예가 있습니다 ...

ME보다 더 똑똑한 동료 가이 솔루션을 생각해 냈습니다. Linq2SQL 객체의 부분 클래스에서 다음 코드를 추가하십시오.

public void SendPropertiesChanged()
{
     foreach (System.Reflection.PropertyInfo prop in this.GetType().GetProperties())
     SendPropertyChanged(prop.Name);
}

응용 프로그램 코드에서이를 호출 할 수 있습니다.

context.Refresh(RefreshMode.OverwriteCurrentValues, employee);
employee.SendPropertiesChanged();

모든 UI 요소는 메시지를 받고 적절하게 스스로 업데이트합니다. 이것은 TreeView Controls 및 바인딩을 새로 고칠 때 UI가 "재설정"하는 것처럼 보이지 않는 것과 같은 것들에도 적용됩니다.

다른 팁

refresh ()에게 전화하는 것을 알고 있다면 어쨌든 그 시점에서 UI를 새로 고치지 않겠습니까?

LinqToSQL DBML 생성 엔티티 클래스에서 세터를 호출하여 PropertyChanging 및 PropertyChanged가 호출됩니다. refresh () 호출은 그렇게하지 않습니다.

[Column(Storage="_DisplayName", DbType="VarChar(50) NOT NULL", CanBeNull=false)]
public string DisplayName
{
    get
    {
        return this._DisplayName;
    }
    set
    {
        if ((this._DisplayName != value))
        {
            this.OnDisplayNameChanging(value);
            this.SendPropertyChanging();
            this._DisplayName = value;
            this.SendPropertyChanged("DisplayName");
            this.OnDisplayNameChanged();
        }
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top