Microsoft MVP성태의 닷넷 이야기
[답변]: 예제 프로젝트 첨부합니다. [링크 복사], [링크+제목 복사],
조회: 17530
글쓴 사람
ho (furho27 at gmail.com)
홈페이지
첨부 파일
부모글 보이기/감추기

안녕하세요 성태님
비밀번호를 통일했다 생각했는데
부모글 작성 시 엉뚱한 비밀번호를 입력해서인지 수정을 할 수 없어서
답변으로 파일을 첨부합니다.
부모글에 간단히 작성한 코드를 기반으로
간단히 프로젝트를 구성하여 첨부하오니 참고 바랍니다.








[최초 등록일: ]
[최종 수정일: 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로 조작한다.

정도가 될 거 같군요.

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

... 46  47  48  [49]  50  51  52  53  54  55  56  57  58  59  60  ...
NoWriterDateCnt.TitleFile(s)
1329popo10/2/201418466싱글톤과 싱글톤 소멸자에 대해 궁금점이 있습니다. [1]
1328달쏭9/25/201419529WCF Service측에서 parameter 값이 null이 오는 이유를 알고 싶어요. [2]
1326궁굼합니다9/19/201418606VB의 Shell 기능과 완벽히 똑같은 기능의 함수 [4]
1325지현태9/18/201418277WPF 의존속성과 바인딩에 대한 질문입니다.. [1]파일 다운로드1
1324popo9/17/201417284wcf 질문 드립니다. [1]
1323Anon...9/17/201419883인스턴스와 객체의 차이 [1]
1321부탁드립...9/15/201421886윈도우 어플리케이션 개발 방법(?) 에대해(직접적인 코드라기보단 프로젝트 방향??) [14]
1320소켓서버...9/13/201422294서로다른 포트번호로 로컬 Socket 서버를 개설시 Close 문제 입니다. [2]
1319ㅇㅇ9/12/201422573134쪽 예제 오타 [3]
1313양해진8/20/201416818메시지창에 대해서요 [1]
1312김영대8/18/201419187안녕하십니까 정성태님 죄송하지만 C#.NET의 FileInfo 클래스의 CopyTo 메서드 질문드립니다. [3]
1311김솔8/18/201419993nsis파일 수정중에요! [2]
1310조정용8/17/201421378WCF 프로그램에서 Task를 이용한 백그라운드 작업 시 클라이언트에 대한 병목현상. [4]파일 다운로드1
1308김솔8/11/201423385리스트뷰에서 중복파일체크를 하고싶습니다. [3]
1306이상현8/7/201416872Entity 프레임웍에서 테이블만 추가로 등록하는 방법
1307이상현8/7/201417564    답변글 [답변]: 자답이네요. [1]
1305popo8/7/201418582wpf UserControl List 바인딩 질문 입니다. [1]
1304민경수8/7/201421656네이버 카페에 구글 스프레드 시트 삽입 [1]
1303김동진8/7/201418701vmware환경에서 Guest IP를 192대역으로 받을 수 있는 방법은 없을까요~? [3]
1300아로스7/28/201431504c# 인터넷 임시 파일 삭제 문의 [12]파일 다운로드1
1298(non...7/25/201426005(글쓴이의 요청으로 삭제합니다.) [15]
1294(non...7/20/201419054(글쓴이의 요청으로 삭제합니다.) [2]
1293VS20...7/20/201421373VS2013 Ultimate에 Windows Phone 프로젝트 템플릿 추가 방법 문의 [1]파일 다운로드2
1292(non...7/20/201417676(글쓴이의 요청으로 삭제합니다.) [2]
1290(non...7/13/201420608(글쓴이의 요청으로 삭제합니다.) [3]
1288박주만7/8/201429893C# 서비스 기반 데이터베이스(mdf) & InstallShield Limited Edition 설치 및 배포 [2]파일 다운로드1
... 46  47  48  [49]  50  51  52  53  54  55  56  57  58  59  60  ...