태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

달력

08

« 2017/08 »

  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  

javascript로 ASP.NET AJAX의 UpdatePanel 컨트롤을 업데이트 시키는 방법을 따라하면 일반적인 경우에는 잘 된다.

그러나 마스터 페이지를 사용하는 페이지에 UpdatePanel을 넣은 경우에는 다음과 같이 __doPostBack 했을 때,

__doPostBack('<%= UpdateUpanelBtn.ClientID %>', '');

PostBack은 발생하지만 버튼 이벤트 핸들러에 들어가지를 않아서 원하는대로 화면이 갱신되지 않는다.

왜 잘 안될까 다른 방법을 써서 마구 삽질하다가, 우연히 ClientID 대신 UniqueID로 바꿔봤는데 잘 된다는 것을 알게됐다.

사실 Page_Load 이벤트 같은데 브레이크 포인트를 걸어놓고, 비동기 PostBack이 발생했을 때 Request.Form 컬렉션을 잘 살펴보면, 컬렉션에 들어가 있는 문자열들은 모두 컨트롤의 ClientID가 아니라 UniqueID 라는 것을 알 수 있다.

신고
Posted by wafe

댓글을 달아 주세요

2009.02.19 01:02

PINY 캠프 2009, 스퀵 이토이 분류없음2009.02.19 01:02

PINY는 청소년을 위한 대안캠프이다. PINY에서는 Squeak eToys를 이용해서 아이들이 팀으로 작업하면서 여러가지 재미있고 의미있는 경험을 할 수 있게 도와준다. 사실 아이들에게 이토이 프로그래밍을 가르치는 것이 캠프의 주요 목적은 아니라고 생각되지만, 캠프의 중요한 도구인 것 또한 사실이다보니 아무래도 스태프들은 이토이 공부를 열심히 하기를 요구 받고 있다. 만지작거릴수록 재미있는 도구라서 자꾸 빠져들게 된다. ^^

다운로드 링크를 클릭하면 Windows용 스퀵 이토이를 설치할 수 있으니 혹시 관심있으신 분은 설치해 보시길 바란다. PINY 캠프에서 사용할 버전이다.

아주 기초적인 사용법은 살아있는 스퀵 교과서를 통해서 익힐 수 있다. 좀더 나아가길 원하면 Kusasa eTyos projects 페이지의 프로젝트들을 받아서 열어보면 좋을 것 같다. 영어로 되어있긴 하지만 아주 친절한 안내를 받을 수가 있다. 웹에서 받은 이토이 프로젝트 파일은 내문서 폴더 아래에 생성되어 있는 etoys 폴더에 넣고 마우스로 더블클릭하면 열 수 있다. (다른 곳에 있는 프로젝트 파일을 열려고 하면 에러가 발생한다.)

신고
TAG eToys, PINY, squeak
Posted by wafe

댓글을 달아 주세요

2009.02.13 14:50

C5 2009 컨퍼런스 공유회 후기 분류없음2009.02.13 14:50

C5 2009 컨퍼런스 공유회를 다녀왔다.

인상 깊었던 점은 컨퍼런스를 같이 가는 것이 아니라 팀으로 갔다는 것, 팀 활동에서 느껴지는 에너지, 그리고 공유회를 열어 나누려는 열정이었다. 덕분에 나같은 사람도 많은 것을 배우고 느낄 수가 있었다.

이런 에너지 넘치는 분위기를 내 주위의 사람과 나누기 위해서 내가 어떤 일을 할 수 있을까?

Creative Commons 활동, 미디어아트 등 접하기 힘든 분야의 사람들을 만나 얘기해 볼 수 있어 좋았다. 사회에 공헌하기 위해 활발하게 자신의 분야에서 활동하고 계시다는 점에서 정말 존경스러운 분들이다.

OST 시간에 책상들 때문에 이동이 쉽지 않고, 소그룹 모임이 많았던 점, 시간이 부족했던 점이 아쉬웠다. 충분한 철학적(?) 배경 지식을 내가 가지고 있지 못하여 앨런 케이의 키노트에 대해 모여서 이야기할 때 다른 사람들과 의견을 충분히 주고 받지 못한 것이 아쉽다.

최승준님이 페차쿠차 때 사용하신 도구가 무엇인지 궁금하다. Silverlight Deep Zoom 처럼 동작하는 데 이런 방식의 발표때 상당히 유용해 보인다. (공유회 피드백 페이지에 서보니 pptPlex라는 도구라고 함)

컨퍼런스에 다녀온 다섯 분은 회고, 잦은 회고의 효과가 좋았다고 자주 말씀하셨다. 그러나 그런 분위기가 부담스러운 사람도 있을 수 있다고 했다. 어떤 좋은 효과들이 있는지, 부담스러워하는 시선을 극복하려면 어떻게 할 수 있을 지 궁금하다.

신고
Posted by wafe

댓글을 달아 주세요

2009.01.24 13:09

WSH로 네이버 캐스트 정보 얻기 분류없음2009.01.24 13:09

네이버 캐스트는 JSON으로 정보를 전해주고 있다. 의미를 알 수 없는 필드들이 많지만, 썸네일 주소나 링크 주소 정도는 알아볼 수 있다.

Windows Script Host 스크립트를 javascript로 작성하여 실행하면 쉽게 JSON 정보를 분석할 수 있다.

  1. <job>
        <script languge="JScript">
            // 네이버 지식인의 서재 정보 얻기
            // file: nav_intelli.wsf
            var xmlhttp = WScript.CreateObject("Msxml2.XMLHTTP");
            xmlhttp.open("GET", "http://www.naver.com/include/navercast/naverCastToday.json.09", false/*bAsync*/);
            xmlhttp.send();
            var response_text = xmlhttp.responseText;

            var navcast = eval('(' + response_text + ')');
            var shelves = navcast.data[4].intellctual[1];
            var result = "";
            for (var i = 0; i < shelves.length; ++i) {
                result += "href=" + shelves[i][2] + "\r\n";
                result += "src=" + shelves[i][3] + "\r\n";
            }
            WScript.StdOut.Write(result);

            //var fso = WScript.CreateObject("Scripting.FileSystemObject");
            //tf = fso.CreateTextFile("response.txt", true/*overwrite*/, true/*unicode*/);
            //tf.Write(response_text);
            //tf.Close();
        </script>
    </job>

 

커맨드라인에서 실행해본 결과.

Microsoft (R) Windows Script Host 버전 5.7
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

href=http://book.naver.com/bookshelf/story.nhn?startmonth=200901
src=http://static.naver.com/www/u/2008/1231/nmms_234746181.jpg
href=http://book.naver.com/bookshelf/story.nhn?startmonth=200812
src=http://static.naver.com/www/u/2008/1231/nmms_2344792.jpg
href=http://book.naver.com/bookshelf/story.nhn?startmonth=200811
src=http://static.naver.com/www/u/2008/1231/nmms_23353632.jpg

 

얻어온 JSON 데이터를 javascript 개체로 만들 때 eval() 함수를 사용하는데, 받은 문자열을 그대로 사용하면 세미콜론이 필요하다는 에러가 났다. 괄호로 묶어서 쓰니까 잘 된다. 왜 이런지는 아직 잘 모르겠다.

 

이 글은 스프링노트에서 작성되었습니다.

신고
Posted by wafe

댓글을 달아 주세요

  1. 도아 2009.02.09 18:04 신고  댓글주소  수정/삭제  댓글쓰기

    저는 네이버에는 도통 관심이 없어서 오픈캐스트도 통 관심이 가지 않더군요.

    • wafe 2009.02.13 01:30 신고  댓글주소  수정/삭제

      지식인의 서재 같은 양질의 콘텐트를 제공해주거나 하는 면은 좋은 것 같습니다. 네이버 같은 거대 기업에서 돈을 쏟아부어서 이런 좋은 일 정도는 해줘야죠. ^^

아웃룩 2007에서 메일을 작성할 때, 주소를 입력하는 부분은 다음과 같이 받는 사람과 참조만 보이는 것이 기본 상태입니다.

숨은 참조를 즐겨 쓰시는 분들은 불편함을 느끼실 수도 있겠습니다.

아웃룩 2007로 바꾸신 분 중에서 숨은 참조를 항상 보이게 하는 설정이 어디 있는지 모르겠다는 분이 계셔서 찾아보니 의외로 어렵지 않은 곳에 있었습니다.

간단히 메일 작성 창의 리본 메뉴 옵션 탭에서 "숨은 참조 표시"를 눌러주면 다음부터는 항상 받는 사람, 참조, 숨은 참조 입력 칸이 표시됩니다.

신고
TAG outlook
Posted by wafe

댓글을 달아 주세요

  1. 2014.11.18 10:27  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

2008.12.04 07:58

Framework's Day, ASP.NET and ASP.NET MVC 분류없음2008.12.04 07:58

지난 주말 데브피아 Framework's Day에 갔었다. 첫 번째 발표였던 김용현님의 발표에 질문을 한 덕분에 Holubs on Patterns 번역서를 득템했다. 어제 기묘 창의력 세미나에서도 책을 받아서 기분 좋은 요며칠이다.

모든 주제들이 모두 흥미있고 고민해야할 주제였지만, ASP.NET MVC는 왠지 가장 피부에 와닿는 주제였다. 발표가 끝나고 장현희님께 한 질문은 'ASP.NET에 대한 경험이 많지 않은 팀이 새로운 프로젝트를 할 때 ASP.NET과 ASP.NET MVC 중 어느 쪽을 추천하시겠습니까?'였다.

  • 테스트 용이성
  • M, V, C를 분리해서 개발하기 용이하다
  • AJAX와의 자연스러운 연결

ASP.NET MVC가 상대적으로 이런 장점을 가지고 있으므로 아직 정식 버전이 나오지는 않은 상태이지만 추천한다고 하셨다.

RoR 짝퉁이라는 소리도 듣는다지만 어쩌면 그건 칭찬일지도 모르겠다. ^^; RoR의 높은 생산성은 이미 유명하니까 말이다. 준비 목록에 ASP.NET MVC도 넣어야겠다.

신고
TAG ASP.NET
Posted by wafe

댓글을 달아 주세요

팬케이크 뒤집기.

신고
Posted by wafe

댓글을 달아 주세요

  1. jindog 2008.11.27 16:25 신고  댓글주소  수정/삭제  댓글쓰기

    좀 무식한 방법이긴 한데;;;
    Max 구하는 함수, 뒤집는 함수 2개만 가지고 단순반복으로 ;;;;

    (남은)배열에서 Max 찾아서 맨 뒤로 보냈다가 다시 뒤집으면
    Max가 가장 앞으로 오는 원리를 이용하면;;;
    ( Max 찾기 + 뒤집기 2번 ) * (n - 1) 정도 되려나? ;;;

    왠지 근데, STL에서 적당한 컨테이너 찾아서,
    항상 Max 값이 앞에 오도록 -_- 꾸며놓고
    원소의 원래 위치값? 이랑 비교하면 금방 계산해낼 수 있을거 같은 느낌... 이 든다? ;;;

2008.11.23 00:31

VS 2010에서 개선되는 것들 분류없음2008.11.23 00:31

RSS를 둘러보다가 S.Somasegar가 쓴 C++ enhancements in VS2010이라는 블로그 포스트를 보았다. 세상에... 아직 VS 6.0을 쓰고 있는데 2010이라니. 이러다보면 VS 2020이 나올 날도 머지 않았겠다.

한국어판 MSDN에 따르면 S.Somasegar는 MS 개발부서의 총 책임자라고 한다.

 

사람 이름이... 정말 뭐라고 읽어야 할 지 모르게 생겼다.

이번에는 전체를 번역하기 보다는 원문에서 언급하고 있는 VS2010의 바뀐점에 대해서 간단히 요약만 해보려고 한다.


VS2010에서는 아주 큰 코드베이스를 가지고 작업하는 개발자들의 생산성을 높여주고자 한다. 큰 코드베이스를 다룰 때 발생하는 비효율성을 개선하기 위해서 IntelliSense 엔진의 아키텍처를 철저히 조사하여 개선했다. 이제는 아주 복잡한 의존성을 가진 소스를 수정한다고 해도 심볼 데이터베이스가 대규모로 업데이트 되는 일은 일어나지 않는다. 많은 곳에서 include 되는 헤더 파일을 자주 수정하거나 프로젝트 설정을 자주 바꾸는 Visual C++ 개발자라면 IDE의 응답성이 엄청나게 향상된 것을 알게 될 것이다.

빌드 시스템도 더 큰 규모의 프로젝트를 다룰 수 있도록 개선된다. VS2010의 MSBuild는 대규모의 복잡한 빌드 환경에 꼭 필요한 높은 커스터마이징 가능성과 확장성, 로깅을 제공한다. 확장성 기능 중에서 한 가지 예로 IDE에서 컴파일러 버전을 선택하는 기능을 들 수 있다. 원문에 첨부된 이미지에서 9.0 컴파일러(VS 2008)와 10.0 컴파일러를 선택할 수 있음을 보여주고 있다.

VS2010은 복잡한 코드베이스를 분석하는 작업을 도와주어 생산성을 높여주는 새로운 도구를 내장하고 나온다. 인텔리센스와 브라우징 기능들의 정확성과 복원력이 개선되었다. 새로운 헤더 의존성 도구는 복잡한 include 계층 구조에 대해서 더 상세한 내용을 찾을 수 있게 해준다. 새로운 Quick Search 기능은 특정 심볼이나 파일로 이동하는 작업을 매우 쉽게 해준다.

라이브러리와 C++ 언어 부분 개선의 핵심은 동시성 지원이다. VS2010에는 Parallel Patterns Library(PPL)가 도입된다. PPL은 멀티 코어 CPU의 장점을 살려 응답성 있는 C++ 응용프로그램을 만들기 위한 새로운 추상 계층을 제공한다. PPL은 병렬성을 표현하는 효율적인 방법과 새로운 비동기 메시징 API-응용프로그램의 응답성과 견고성을 증가시키는-를 제공한다. 또한 VS2010은 C++0x 표준의 새로운 언어 기능을 지원한다. 람다나 'auto' 키워드 같이, PPL을 사용하는 코드를 더 깔끔하고 유지보수하기 쉽도록 작성할 수 있게 해주는 기능이다.

마지막으로, Windows Vista와 Windows 7의 기능을 아주 쉽게 사용할 수 있게 해주는 MFC의 새 기능이 포함된다. 재시작 관리자(restart manager)는 MFC 응용프로그램이 예기치 않게 종료되었을 때 자연스럽게 이전 상태를 복구하는 기능이다. Task 다이얼로그는 문자로만 구성된 메시지 박스 대신 풍부한 사용자 인터페이스를 사용할 수 있게 해주는 기능이다.

여러 해 동안, C++ 개발자들이 Visual C++ 6.0을 사용하던 시기를 Visual C++ 도구의 영광의 날들이라고 언급하는 것을 들었다. 활기있고 생산성 있는 IDE를 그리워하는 개발자들이 많다. Visual C++ 2010으로 Visual C++ IDE의 생산성에 대한 새로운 기준을 만들려고 노력하고 있다.

Visual C++ 팀 블로그에서 새로운 정보를 얻을 수 있고, 개발팀과 직접 소통할 수 있다.

신고
Posted by wafe

댓글을 달아 주세요

  1. ntrolls 2008.11.23 03:58 신고  댓글주소  수정/삭제  댓글쓰기

    헉, 아직 회사에서 VS6 쓰나?

    • wafe 2008.11.23 17:26 신고  댓글주소  수정/삭제

      아직 3, 4 등등 제품들이 남아있어요. 플랫폼 변경은 워낙 큰 일이라서 말이죠. ^^ 새로하는 프로젝트들은 VS2008로 하고 있어요.

2008.11.20 18:08

YTN과 공정방송을 생각하는 날 분류없음2008.11.20 18:08

YTN과 공정방송을 생각하는 날을 맞아, 검은 색 스킨으로 교체했다.


신고
TAG YTN
Posted by wafe

댓글을 달아 주세요

Silverlight Model-View-ViewModel Pattern 1에 이어서.



눈치챘을지도 모르겠지만, 이 코드는 의존성 주입(dependency injection)의 필요성을 외치고 있고, 내가 다음 블로그 포스트에서 다루려고 하는 게 바로 그것이다. 우리는 현재 어플리케이션 개체의 타입을 체크한다. Blend는 그것 스스로의 어플리케이션 개체를 제공하는 반면, 실제로 실행되는 어플리케이션은 우리가 만든 어플리케이션 개체를 우리에게 준다.

리팩토링이 필요한 다음 부분은 메인 사용자 인터페이스이다. 여기서 내가 말하는 것은 카드 주위의 모든 것이다. 어플리케이션은 Twitter 계정을 넣는 텍스트 상자 하나와 새 카드를 추가하기 위한 추가 버튼을 가지고 있다. 클릭 이벤트 핸들러에서 우리는 새 YouCard 사용자 컨트롤의 인스턴스를 만들어서 스택 패널에 넣는다. 또한 YouCard 컨트롤에서 발생하는 클로즈 이벤트를 리스닝하는 이벤트 핸들러를 작성한다. 이런 접근 방법은 몇 가지 이유 때문에 좋지 않은 방법이다. 주요한 문제는 너무 많은 행동(behavior)과 로직을 뷰(XAML 페이지의 코드 비하인드)에 넣는 것이다. 예를들어 디자이너는 코드를 수정하지 않고서는 스택 패널에서 플로우 패널로 바꿀 수가 없다. 또한 어플리케이션 로직의 너무 많은 부분이 특정 UI 컨트롤과 UI 이벤트에 종속되어 있어 코드를 유닛 테스트하기가 어렵다.

이런 문제를 해결하기 위해서 우리는 YouCardData 개체의 옵저버블 컬렉션(Users)을 포함하는 새로운 뷰-모델을 만들 것이다. 이 컬렉션은 YouCard 사용자 컨트롤을 데이터 템플릿으로 사용하는 items presenter control에 바운드된다.


이제 우리는 뷰-모델에 바운드된 UI들을 가지고, 데이터를 어떻게 표시할 것이지 콘트롤하게 되었다. 하지만 이것은 아직 절반 정도밖에 안된다. 아직 사용자가 카드를 추가/삭제할 때 뷰-모델과 인터랙션하게 할 방법이 필요하다.

YouCard 어플리케이션에는 뷰-모델에 영향을 주는 인터랙션 포인트가 두 군데 있는데, 텍스트 상자와 새 사용자 추가 버튼, 목록에서 카드를 제거하는 빨간 버튼이 그것이다. 사용자는 사용자 이름을 입력하고 엔터 키를 누르거나, 추가 버튼을 클릭하여 Users 컬렉션에 새 아이템을 추가한다. 추가 버튼은 입력된 사용자 이름이 올바른 경우에만 활성화되어야 한다. 사용자가 카드에 있는 닫기 버튼을 클릭하면 우리는 뷰-모델에 있는 컬렉션으로부터 그 아이템을 제거해야 한다.

가장 뻔한 해답은 추가 버튼에 클릭 이벤트 리스너를 추가해주고, 새 사용자를 추가하기 위해서 뷰-모델에 있는 메서드를 호출하는 방법일 것이다. 우리는 텍스트 상자의 text changed 이벤트를 받아서 입력을 검증하고 텍스트에 따라서 텍스트 상자를 활성화/비활성화 할 수 있을 것이다. 또한 우리는 빨간 버튼을 클릭했을 때 발생하는 이벤트를 YouCard 컨트롤에 추가할 수도 있을 것이다. 메인 뷰는 이 이벤트를 받아서 해당하는 카드를 뷰-모델로부터 제거할 수 있을 것이다. 이 방법의 문제점은 디자이너가 소유해야만 하는 뷰에 또 다시 로직과 행동(behavior)을 넣게 된다는 것이다. 그렇게 되면 검증 규칙 같은 것들과 추가되거나 제거된 사용자를 로컬 컴퓨터의 isolated storage에 저장하는 것(우리 어플리케이션은 당신이 추가한 카드들을 저장한다) 같은 일들을 유닛 테스트하기가 더 힘들어진다.

뷰와 뷰-모델 간의 인터랙션 문제를 해결하기 위해서 우리는 커맨드 패턴을 적용할 것이다. 커맨드 패턴을 사용하면 액션을 커맨드 개체로 캡슐화할 수 있게 된다. 커맨드 개체는 보통 실행 메서드, 이름과 설명, 커맨드가 활성화되었는지 아닌지에 대한 몇몇 정보를 포함한다. 하나의 커맨드 개체가 여러 UI 엘리먼트에 붙을 수 있다. 당신은 버튼, 키보드 단축키, 메뉴 아이템으로부터 open-file-command를 호출하고 싶을 지도 모르겠다. WPF는 Commands에 대한 지원을 내장하고 있지만 Silverlight 2에는 포함되지 않았다.

Nikhil은 Silverlight behavior를 통해서 어떻게 커맨드 같은 기능을 만들 수 있는지에 대해서 멋진 아이디어를 소개했다. 그것은 ASP.NET 컨트롤을 AJAX behavior로 확장하는 데 사용된 것과 같은 개념이다. 첫번째 ViewModel 포스트에서 Nikhil은 XAML에서 커맨드를 호출하는 데에 다음과 같은 문법을 사용했다.


첨부 속성(attached property)를 이용해서, 뷰-모델에 있는 Search 메서드에 검색 텍스트 상자의 text 속성을 인자로 전달하면서 메서드를 호출하는 행동을 버튼에 추가했다. 이어지는 포스트에서 Nikhil은 Dynamic Language Runtime을 사용하여 더욱 컴팩트한 문법을 사용하는 방법을 보여주었다.

이 접근 방법의 멋진 점은 첨부된 클릭 이벤트에 모든 동적 언어 표현을 사용할 수 있다는 점이다. 메서드 호출이나 페이지에 있는 다른 엘리먼트로부터 파라미터를 얻는 것 등을 사용할 수 있는 것이다. 이 방법으로 뷰를 뷰-모델에 연결하게 되면 놀라운 유연성을 얻게 된다. 이 방법의 문제점은 동적 언어 런타임에 의존성이 생겨서 Silverlight 어플리케이션 크기가 늘어나게 된다는 것이다. 하지만 내가 더 중요하게 생각하는 부분은 이 방법을 쓰게 되면 Blend 2.5에서 제공하는 디자인 타임 지원을 사용할 수 없다는 점이다. 따라서 우리는 다른 접근법을 찾아야 한다.

나는 CodePlex에 있는 "Silverlight Extensions" 프로젝트에서 발견한 좀더 고전적인 커맨드 패턴 구현을 사용하기로 했다. 그 프로젝트는 컨트롤, 헬퍼 클래스, 확장 메서드 등을 포함하고 있다. 우리는 커맨드 패턴 구현에만 관심이 있으므로, 구현 클래스들을 YouCard 프로젝트로 옮기기로 했다. 이제 텍스트 상자와 버튼의 XAML 코드는 아래와 같다.

텍스트 상자는 뷰-모델의 Username 속성에 바운드된다. 두 컨트롤은 모두 뷰-모델의 Username을 파라미터로 사용하여 AddCard 커맨드를 호출한다.

커맨드는 다음과 같이 정의된다.

정적 Commands 클래스는 우리 어플리케이션에서 사용할 수 있는 모든 커맨드에 대한 참조를 유지한다. 새 Command 개체 인스턴스를 만들 때 그것은 Command 개체에 있는 정적 사전(static dictionary)에 추가된다. 어플리케이션에서 만들어진 모든 커맨드 개체는 그 사전에 캐싱된다. XAML에서 CommandService attribute를 사용할 때 CommandService 클래스는 CommandSubscription 클래스를 사용하여 올바른 커맨드를 가진 UI 엘리먼트에 연결된다. 사용자가 사용자 추가 버튼을 클릭했을 때 혹은 텍스트 상자에서 엔터 키를 입력했을 때, CommandSubscription 클래스는 UI 이벤트를 받아서 해당하는 Command 개체의 Executed 이벤트를 발생시킨다. 커맨드가 실행되었을 때 무언가 행동을 취하기를 원하는 클래스는 단순히 Command 개체의 Executed 이벤트를 받기만 하면 된다. 지금같은 경우 우리는 뷰-모델 클래스에서 카드를 추가하고 삭제하는 작업을 처리하기를 원한다.

얘기할만한 가치가 있는 다른 부분으로는 사용자 추가 버튼을 활성화/비활성화하는 부분이 있다. 이 부분은 IsEnabled 버튼의 속성을 뷰-모델의 IsAddEnabled 속성에 데이터 바인딩하는 식으로 되어있다. IsAddEnabled 속성은 이렇게 되어있다.

텍스트 상자는 IsAddEnabled 속성에 대한 PropertyChanged 이벤트를 발생시키는 Username 속성에 바운드되어 있다. 속성의 get 부분에서 우리는 버튼이 활성화되어야 하는지 아닌지에 대한 검증 규칙을 적용한다.

이 포스트가 Model-View-ViewModel 패턴이 어떻게 UI로부터 가능한한 많은 코드를 분리해내는지 당신에게 알려주는 또다른 예제가 되기를 바란다. WPF와 Silverlight의 강력한 데이터 바인딩 지원은 이 패턴을 아주 흥미롭게 만들어준다. 뷰와 뷰-모델 사이의 동기화 코드를 직접 작성하는 부분에 대한 걱정을 하지 않아도 되기 때문이다. 커맨드 패턴을 사용하면 어플리케이션의 액션을 UI 엘리먼트로부터 분리할 수 있다. 이로써 디자이너는 여러가지 액션을 호출하는 데 사용하는 UI 엘리먼트를 선택할 수 있는 자유를 얻는다. 그리고 무엇보다도, 우리는 Blend에서의 디자인 타임 지원을 그대로 유지하면서 이 모든 것을 해냈다. 다음 포스트에서는 의존성 주입(dependency injection)을 도입함으로써 YouCard 어플리케이션의 테스트 가능성을 높이는 작업을 계속할 것이다.


실컷 열심히 번역을 하고 보니 뒷북이란 걸 알게됐다. ㅜ.ㅜ 이미 실버라이트 카페의 boxmile 님께서 번역을 해두셨네. 다음에는 이런 삽질을 하지 말도록 하자.

신고
Posted by wafe

댓글을 달아 주세요

  1. 네오군 2009.01.08 21:54 신고  댓글주소  수정/삭제  댓글쓰기

    헉!!!!!!!!!!!!!!! 저두 님 글 보구 알아챘는데여... 정말 제가 죽고 싶은건.. 님께서 링크해주신 번역글을 제가 전에 읽어봤다는 겁니다.. 그걸 까먹고 있었어여 ㅠㅠ;; 늙으면 죽어야지 ㅠ;