Microsoft MVP성태의 닷넷 이야기
[답변]: 예제 프로젝트 첨부합니다. [링크 복사], [링크+제목 복사]
조회: 4202
글쓴 사람
홈페이지
첨부 파일
부모글 보이기/감추기
안녕하세요 성태님
비밀번호를 통일했다 생각했는데
부모글 작성 시 엉뚱한 비밀번호를 입력해서인지 수정을 할 수 없어서
답변으로 파일을 첨부합니다.
부모글에 간단히 작성한 코드를 기반으로
간단히 프로젝트를 구성하여 첨부하오니 참고 바랍니다.






[최초 등록일: ]
[최종 수정일: 11/17/2017 ]


비밀번호

댓글 쓴 사람
 



2017-11-16 03시53분
소스까지 올려주셨는데, 제가 정답을 못 드리게 되는군요. 일단, 데이터 바인딩 오류도 없는 걸로 봐서 의도하신 대로 잘 코딩하신 것 같습니다. UI에도 잘 반영이 되는 IsChecked 속성이 그것과 데이터바인딩된 IsChk에 반영되지 원인은 저도 모르겠습니다.

어쨌든, 이런 경우에 문제를 해결해야 하니 최대한 자연스럽게 하기 위해 다음과 같은 식으로 수정해 봤습니다.

1. CFile의 IsChk 속성에 대해 INotifyPropertyChanged 알림 구현
2. DataGridChkBoxColumn의 Checked DP에 대해 OnCheckedProprtyChanged에서 데이터그리드에 반영된 CFile 목록의 값을 직접 코드로 변경
3. dataGridChkCellStyle의 ControlTemplate.Triggers 노드는 제거

본래 원하는 바가 아니지만, 일단 제 수준에서 할 수 있는 것은 이 정도인 것 같습니다. 좀 더 WPF 잘 아시는 분이 정답을 주면 좋겠군요.

(제가 수정한 코드는 이 글의 첨부파일로 등록된 2번째 DataGridChkCell.zip 파일에 있습니다.)
정성태
2017-11-17 02시15분
[이성환] 안녕하세요. 큰 도움은 못 되겠지만 제가 간단히 살펴본 내용을 잠깐 말씀 드릴까합니다.

먼저 위 동작에서 바인딩된 VM의 property 에 setter 가 호출되지 않는 원인은
template 내부에서 사용하는 trigger 때문으로 추정되는데요.
template 내부에서 Trigger가 호출되면 ParentTemplateTrigger가 일시적으로 해당 DP의 기존 Binding을 해제하고 강제로 값할당을 수행하게 됩니다.
따라서 Binding 이 해제되기 때문에 VM의 property setter는 호출되지 않습니다. 물론 Trigger 가 setter 호출 이전 원래 값으로 돌아갈 때 Binding은 복구 됩니다.
(근데 저도 내부 구현을 본 게 아니라 이게 정확한 지는 모르겠네요. 어디선가 읽은 기억이 있는데 출처를 못 찾겠습니다. 혹은 제 기억이 잘못 되었을 수 있습니다.)

그래서 개인적으로는 Trigger를 통해 VM을 핸들링하는 것은 의도하지 않은 동작을 야기할 수 있어어 피하는 편입니다.

질문하신 IsChk 에 대한 핸들링은 Trigger 외부에서 Binding을 통해 하는 것이 좋을 듯 합니다.

따라서 위에서 의도하신 체크박스 처리는 다른 방법으로 하는 것이 더 나아 보입니다.

굳이 방법을 떠올려보자면
1. DataGrid에 별도의 Behavior를 붙여서 code 로 조작한다.
2. DataGrid의 VM 혹은 ItemsSource에 접근 가능한 VM위치에 전제 선택 property 를 추가하고 헤더와 Binding 한 다음 이 property에서 직접 code로 조작한다.

정도가 될 거 같군요.

역시... 써놓고 보니 도움은 안 된 것 같네요...;ㅅ;
[손님]
2017-11-17 02시57분
[ho] 제가 잘 알지 못해서겠지만 신기하고 이상한것 같습니다;
아무래도 바인딩에 대하여 좀더 알아봐야 할 것 같습니다.
몇 가지 테스트를 해봤는데 컨트롤의 특정 속성에 바인딩을 하고
컨트롤의 Style.Triggers를 이용해 데이터 트리거를 구성하였습니다.
데이터 트리거의 조건이 만족하면 바인딩된 특정 속성의 값을 변경하였는데
이번엔 그 속성의 값도 변경이 되지를 않았습니다.
(- VM에 정의된 속성도 변화가 없었습니다.)
제가 첨부한 예제 프로젝트의 경우
템플릿에 체크박스가 있어 타깃명으로 하여 체크박스의 속성에 접근을 한 것 이었다면
위의 경우는 컨트롤 자체에 접근을 한 부분이었습니다.
테스트한 내용으로 생각을 해보면
컨트롤의 속성에 바인딩을 한 후엔 트리거를 통해 속성 접근이 불가하고
템플릿 자식으로 추가된 컨트롤의 경우 트리거를 통해 속성 접근은 가능하지만
바인딩된 VM의 속성에는 반영이 되지 않는다고 보면 될것 같습니다.
코드에서 속성을 통해 변경하면 컨트롤과 VM의 속성에도 제대로 반영이 되는데
트리거를 통해선 제약이 있단 부분이 좀 웃기고
무엇보다 XAML에서도 접근하는 부분에 따라 다르게 접근한단게 이상한 것 같습니다.
확인 감사드립니다.
[손님]
2017-11-17 03시07분
[ho] @이성환) 감사합니다. 템플릿 내부 트리거에 그런 부분이 있었군요
트리거를 통해서 VM에 접근하는 것은 지양해야겠습니다.
성환님 말씀처럼 현재에선 Behaviors를 통해 처리를 해야할 것 같습니다.
[손님]

1  2  3  4  5  6  7  8  9  10  11  12  13  [14]  15  ...
NoWriterDateCnt.TitleFile(s)
4969이대희3/31/20182504    답변글 [답변]: 자마린 설치후 안드로이드 프로젝트 생성시 디자이너가 없다는 에러가 발생합니다.파일 다운로드2
4970이대희4/1/20182325        답변글 [답변]: [답변]: 자마린 설치후 안드로이드 프로젝트 생성시 디자이너가 없다는 에러가 발생합니다. [1]
4963이대희3/29/20183086UWP 스터디를 위해 찰스페졸드 저자의 Programming Windows 6판은 어떠한지요? [1]
4962포플러3/26/20182899C# 응용프로그램 (Winform)에서 unhandledexception 발생시 프로그램이 죽는 현상 이외에 재부팅될 수도 있을까요? [2]
4966포플러3/30/20182876    답변글 [답변]: C# 응용프로그램 (Winform)에서 unhandledexception 발생시 프로그램이 죽는 현상 이외에 재부팅될 수도 있을까요? [1]
4961김민욱3/26/20182682레이더 뷰어의 구현 방법(이미지 확대 축소 관련) [2]
4960hurderella3/18/20182690OCX 관련한 질문을 드리고자 합니다. [1]
4959익명3/10/20182553교재 199page 델리게이트와 object를 이용한 범용 정렬 코드 [1]
4957멍멍이2/13/20183054System.Console - WriteLine함수의 제너릭 사용 [1]
4956김성대2/12/20182783asp.net 질문입니다. [1]
4955웅이2/12/20182325[삭제] WPF에서 list 속도 향상하는 방법이 있을까요?
4954초보자2/8/20183358FFT Library 사용 [1]
4950ASP열공2/5/20182535asp.net 과 C# 을 이용해서 홈페이지 만드는 질문입니다. [1]
4951ASP열공2/6/20182728    답변글 [답변]: asp.net 과 C# 을 이용해서 홈페이지 만드는 질문입니다. [1]
4952ASP열공2/7/20182766        답변글 [답변]: [답변]: asp.net 과 C# 을 이용해서 홈페이지 만드는 질문입니다. [1]
4953ASP열공2/7/20182408            답변글 [답변]: [답변]: [답변]: asp.net 과 C# 을 이용해서 홈페이지 만드는 질문입니다.
4949김성대1/31/20183218비동기 질문입니다. [3]파일 다운로드1
494880511/31/20182599C# 7.1책 보다가 질문드립니다 [1]
4947김성대1/31/20182923[삭제] 비동기 질문입니다. [2]파일 다운로드2
4946윤현수1/29/20182993비동기 TCP통신 데이터 문제 [4]파일 다운로드1
4945김성대1/26/20182432비동기 질문입니다. [1]파일 다운로드1
4944popo1/25/20182100[삭제] 스레드 안에서 Window Visibility 변경시 DialogResult 오류 질문
4943김성대1/22/20182519FromAsync 질문입니다. [1]
4942박현일1/19/20183885WPF 공부중 모르는 문법이 있어서요~^^; [2]
4941김성대1/18/20182442비동기예약어 실행오류관련입니다. [1]
4940plzheaven1/10/20182715webbrowser2 를 이용한 sns 로그인 구현 관련 문의 [2]
1  2  3  4  5  6  7  8  9  10  11  12  13  [14]  15  ...