2010-03-23 5 views
0

내가 WPF에서 MVP를 사용하고 있는데 내가 디자인 의심을 가로 질러 와서 나는이에 대한 당신의 의견을 얻을 것 : 내보기를 새로 고침과 같은 초기 쿼리를 수행 할 필요가 어느 시점에서새로 고침/리셋보기

보기가로드 될 때처럼 뷰의 DataContext 내 발표자이며 몇 가지 컬렉션 및 뷰에 바인딩 된 다른 변수가 있습니다. 뷰를 새로 고침해야 할 때 컬렉션 및 변수를 지우고 DataContext를 null로 설정합니다. 그런 다음 새 데이터를 가져오고 컬렉션을 채우고 DataContext를 설정합니다. 이것을 달성하는 가장 좋은 방법입니까?

이 문제는 내 앱이 커질 때 변수가 재설정되는 것을 잊어 버렸습니다 ... 이상적인 점은 변수를 걱정하지 않고도 다시보기를 다시로드하는 것입니다. 있다.

감사합니다.

답변

1

제이, WPF의 디자인 철학은 매우 데이터 중심입니다. 사실을 감안할 때 DataContext를 null로 설정하거나 뷰를 다시로드 할 필요가 없음을 제안합니다. 대신, 관찰 가능한 컬렉션을 사용하거나 DataContext 개체에 INotifyPropertyChanged를 구현하여 데이터를 지우고 새로 고치는 뷰를 경고 할 수 있습니다.

+0

안녕하세요 에드, 나는 당신의 아이디어를 얻었고 나는 동의한다. (적어도 부분적으로는). 사실, 나는 모든 변수를 수동으로 재설정해야하므로 뷰에 바인딩 된 많은 변수가있다 (propertychanged는 UI 업데이트). 내 컬렉션을 지우면 (Observable이라고 가정) textblocks 값과 ComboBoxes SelectedItems를 지 웁니다. 그게 내 목적을 달성 할 수있을거야 ... 나는 Observ를 사용하지 않았다. 콜렉션은 오버 헤드 때문에 아이템으로 아이템을 만들고 싶지 않기 때문에 (내 상황에서는), Obs 몇 개를 빌드하십시오. 약 10 개의 항목으로 이루어진 컬렉션은 각각 큰 영향을 미칩니 까? – Jay

+0

Jay, 성능 테스트를해야 할 수도 있습니다. 아이디어 : ObservableCollections 대신 IList를 구현하는 컬렉션을 사용하고 모든 항목을 추가/제거한 후에 INotifyPreportyChanged를 사용할 수 있습니다. 이렇게하면 항목 당 한 번이 아니라 모든 것을 추가 한 후에 만 ​​업데이트가 적용됩니다. –

관련 문제