2009-03-10 2 views
0

Client 개체 목록을 표시하는 ListView가있는 UserControl이 하나 있습니다. 행 중 하나를 두 번 클릭하면 애니메이션이 재생되고 해당 클라이언트의 계정 목록을 보여주는 다른 UserControl으로 전환됩니다.WPF : 모든 바운드 속성로드 전에 UserControl 표시

두 번째 사용자 정의 컨트롤은 Client 개체의 Accounts 속성에 바인딩됩니다. 계정 목록은 속성에 처음 액세스 할 때로드됩니다. 계정 목록이 작 으면이 모든 것이 효과적입니다. 계정 목록이 크면 두 번 클릭하는 것과 계정 목록이 나타나는 사이에 매우 눈에 띄는 지연이 있습니다. 그리고 애니메이션은 전혀 재생되지 않습니다.

나는 여기서 무슨 일이 벌어지고 있는지 이해하지만 최선의 해결책을 고를 수는 없다. 애니메이션을 계속 재생하고 두 번째 사용자 컨트롤이 표시되도록하려면 어떻게해야합니까?하지만로드 된 계정 목록이 나타납니다. 비동기 적으로 목록보기를로드해야 할 필요가 있음을 이해하고 있으며이 경우 BackgroundWorker를 사용하여 문제가 없지만이로드가 발생할 위치가 확실하지 않습니다.

계정 목록은 ObservableCollection이고 Client 개체는 INotifyPropertyChanged를 구현하지만 setter가 없으므로 accounts 속성에 대해 PropertyChanged를 호출하지 않습니다.

답변

1

WPF에서 가상화 된 컨트롤을 살펴볼 필요가 있다고 생각합니다. 전체 목록이 아닌 내용 만 표시하므로 표준 ListView보다 훨씬 빠릅니다.

1

바인딩에서 IsAsync = true를 설정할 수 있습니다 (예 : {Binding Path = Accouns, IsAsync = true}

).