회사 프로젝트를 수행하던 중 트리 구조의 자료 구조에서 depth 1의 노드들 따로, depth 2의 노드들 따로 두 개의 UI 컴포넌트에 각각 바인딩할 일이 있었다. 나는 별 고민없이 DropDownList 의 DataSource에 depth 1의 노드들을 바인딩하였고, GridView의 dataSource에는 depth 2의 노드들을 바인딩하였다. depth 1 의 노드들과 depth 2의 노드들은 모두 한 Instance 안에 존재하였다.
초반엔 문제가 없었는데, GridView의 DataSource만 따로 조작해야 할 상황이 생기자 문제가 발생하였다. 나는 GridView에서만 Refresh를 하고 싶었는데, depth 2의 노드들을 Refresh 하고 나니 DropDownList에 바인딩되었던 depth 1의 노드들도 함께 Refresh가 되는 것이었다.
문제는 하나의 Instance를 두 개의 UI Component가 공유해서 사용하기 때문에 발생한 문제였다. 그래서 나는 약간의 메모리 비효율을 가져오더라도 원래 쓰고 있던 Instance의 Clone 객체를 만들어서 DropDownList 컴포넌트와 GridView 컴포넌트 각각에게 바인딩을 시켜 주었다. 그러고 나니, 각 UI Component 들은 내가 원하는 로직대로 동작하였다.
다만, 마지막에 데이터를 저장할 때에는 두개로 나뉘어졌던 Instance의 정보들을 하나의 Instance로 합쳐서 저장해야 했다.
반응형
'Development Experience > C#' 카테고리의 다른 글
C# log4net을 XML 대신 코드로 사용하기 (0) | 2021.08.31 |
---|---|
Winform UI Component의 Dock 스타일 적용이 잘 안 될 경우 (0) | 2021.03.04 |
C# Winform DropDownList의 SelectedIndex 이벤트 관리 (Telerik 사용) (2) | 2020.11.30 |
WPF Window 창이 작업 표시줄 (Task bar) 을 덮는다면.. (0) | 2020.03.30 |
C#, WPF 창이 중복으로 뜬다면.. EventHandler를 의심하라 (0) | 2020.03.27 |