GSI

데이터 바인딩#1 - 기본
데이터 바인딩#2 - Binding Mode
데이터바인딩#3 - DataContext
데이터 바인딩#4 - TextBox vs Run
데이터 바인딩#5 - FrameWorkElement Demo
데이터 바인딩#6 - IValueConverter

저번 시간까지 텍스트에 대해서 알아 봤습니다.
이번 시간은 FrameElement를 사용하게 되면 좋은 효과를 볼 수 있는 데모를 보면서 의존 프로퍼티의 장점을 보도록 하겠습니다.

의존 프로퍼티 시스템은 내부에 통보 장치가 구현되어 있어서 바인딩 소스가 의존 프로퍼티가 될 필요가 없지만 의존 프로퍼티일 경우 상당히 유용해질 수 있습니다.
이 말은 소스가 의존 프로퍼티가 없어도 타겟의 경우 소스의 값을 참조 할 수 있지만, 의존 프로퍼티가 있을 경우 통지 메시지를 받을수 있어서 소스이지만 타깃의 기능을 사용할 수 있다 정도로 이해 하시고 다음 소스를 보시면 더 이해가 빠를 겁니다.

우선  FrameWorkElement 를 상속받은 클래스를 하나 생성합니다.

using System;
using System.Globalization;
using System.Windows;
using System.Windows.Media;

namespace WpfApplication1
{
    class SimpleElement : FrameworkElement
    {
        // DependencyProperty 정의
        public static DependencyProperty NumberProperty;

        // 정적 생성자에 DependencyProperty 생성
        static SimpleElement()
        {
            NumberProperty =
                DependencyProperty.Register("Number", typeof(double),
                    typeof(SimpleElement),
                    new FrameworkPropertyMetadata(0.0,
                        FrameworkPropertyMetadataOptions.AffectsRender));
        }

        // DependencyProperty를 CLR 프로퍼티를 노출
        public double Number
        {
            set { SetValue(NumberProperty, value); }
            get { return (double)GetValue(NumberProperty); }
        }

        // MeasureOverride를 오버라이딩해 크기를 하드 코딩
        protected override Size MeasureOverride(Size availableSize)
        {
            //return base.MeasureOverride(availableSize);
            return new Size(200, 50);
        }

        // Number 프로퍼티를 보여주는 OnRender
        protected override void OnRender(DrawingContext dc)
        {
            dc.DrawText(
                new FormattedText(Number.ToString(),
                    CultureInfo.CurrentCulture, FlowDirection.LeftToRight,
                    new Typeface("Times New Roman"), 12,
                    SystemColors.WindowTextBrush),
                    new Point(0, 0));
        }
    }
}


이 클래스는 double라는 double 타입의 프로퍼티를 하나 정의 했습니다. 이 프로퍼티는 NumberProperty라는 DependencyProperty의 지원을 받게 됩니다.
FrameworkPropertyMetadata 는 초기값이 0 이며, 프로퍼티에 변화가 생기면 OnRender가 호출되고 화면이 갱신 됩니다.

이제 이 코드를 적용할 xaml 코드를 보겠습니다.
<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:src="clr-namespace:WpfApplication1"
    Title="Window1" Height="300" Width="300">
   
    <StackPanel>
        <ScrollBar  Orientation="Horizontal"
                    Margin="24"
                    Maximum="100"
                    LargeChange="10"
                    SmallChange="1"
                    Value="{Binding ElementName=Simple, Path=Number, Mode=OneWayToSource}" />
       
        <src:SimpleElement x:Name="Simple" HorizontalAlignment="Center" />
       
        <ScrollBar  Name="scroll"
                    Orientation="Horizontal"
                    Margin="24"
                    Maximum="100"
                    LargeChange="10"
                    SmallChange="1"
                    Value="{Binding ElementName=Simple, Path=Number, Mode=TwoWay}" />
       
        <src:SimpleElement HorizontalAlignment="Center" Number="{Binding ElementName=scroll, Path=Value, Mode=OneWay}"/>
    </StackPanel>
</Window>

SimpleElement 엘리먼트상의 x:Name 속성은 FrameworkElement를 상속받지 않은 XAML 엘리먼트를 위한 속성이다. 이 엘리먼트들은 Name 프로퍼티가 없기 때문에 Name 프로퍼티를 사용할 경우에는 에러가 발생한다. 이 에러는 "SimpleElement가 동일한 어셈블리에서 구현되었기 때문에 Name 속성 대신에 x:Name 속성을 사용해야함" 이다.

이 내용을 사용해서 행동을 해보면 아래와 같은 행동이 일어 난다.
첫 번째 ScrollBar를 움직이면  나머지 모든 정보가 바뀌게 된다.
두 번째 ScrollBar를 움직이면 첫 번째 ScrollBar는 움직이지 않는다.

사용자 삽입 이미지


첫 번째 ScrollBar는 OneWayToSource로 되어 있기 때문에 ScrollBar가 타깃이 되지만 내부적으로는 소스형태가 되는 것이다. 이전 강좌에서 말한 것처름 타깃이 소스로 날아 가는거라고 했다. 즉, ScrollBar의 값이 SimpleElement로 전달 되게 되는 것이다. 이것은 SimpleElement가 의존 프로퍼티의 형태를 뛰지 않았을때를 가정한다.

두 번째 ScrollBar는 TwoWay 형태를 취하고 있기 때문에 Element 로 값을 업데이트 하게 된다. x:Name 를 가지고 있는 SimpleEment로도 값을 보내게 되는 것이다.

설명은 여기 까지며 덫붙여 설명하면,

SimpleElement() 에 포함되어 있는 FrameworkPropertyMetadataOptions 의 옵션에는 데이터 바인딩을 처리해 줄 수 있는 옵션들이 포함되어 있다.

두 번째 ScrollBar의 Mode=OneWay를 하게 되면 첫 번째 ScrollBar와 연동되지 않으며,
첫번째 SimpleElement와도 연동되지 않는다.
OneWay로 하게 되면 위쪽의 SimpleEment의 값을 타깃으로 받을 수만 있고 넘겨 줄 수가 없게 되는 것이다.

이번 강좌는 여기까지 ^^.
OneWay, TwoWay, OneWayToSource에 대해서 조금은 더 테스트를 해보면서
확실하게 알아갈 필요가 있는듯 합니다.
FrameWorkElement의 이용에 대해서도 한번더 이해를 할 수 있는 시간이였습니다.

모두 수고 ^^

참고 ^^
본 내용은 "찰스페졸드의 WPF"의 내용을 이해 하고 나름 생각과 같이 정리한 겁니다.
제제가 가해질 경우 바로 삭제하도록 하겠습니다. ^^;
Posted by gsi
:

WPF Healthcare Demo

WPF 2007. 11. 21. 09:40 |

Friday, February 16

Impress your friends showcasing WPF

Copie d'écrande l'application WPF Patient monitoringYou surely already have seen demonstrations of the applications which can be made using Windows Presentation Foundation (formerly Avalon). At events like the Ready For a New Day Launch, for instance.

Among those, did you see that impressive healthcare monitoring application with pages rotating in 3D? Well, it's available now, together with its source code. It runs on Windows Vista, but also on Windows XP (provided you install the .net framework 3.0). Just download it there, and run it (it's already compiled).

Unzip it, go to the Healthcare_Prototype\sources\Avalon Patient Monitoring\bin\Release directory and double click Avalon Patient Monitoring.exe. And impress your friends.

From a technical standpoint: what's impressive is not as much the result (such applications could be made before WPF) as the fact this kind of applications can be created easily, quickly and in an elegant way with WPF. In the ZIP file you'll get, there's a PowerPoint document explaining what's behind the application.

Posted by gsi
:

DevDays 2007 세미나를 갔다 왔다.

가장 좋았던 세션은 10년 후를 내다보는 개발자의 커리어 개발 이거였던거 같다.

그중에 가장 인상깊은 말은 프로그램 언어를 많이 아는것도 필요하지만 기본적인
프로그램의 원리를 알아야 한다고 말했다.

예를 들어서 컴파일러는 어떻게 동작 하는거, 컴퓨터의 시스템 구조는 어떻게 돌아 가는가. 등등의 언어에 대한 기본 적인 지식 이후에 부딫히는 한계를 넘기 위해서는 기본 지식이 뒷받침 되어야 한다는 얘기인듯 했다.

기본

C++을 배우고 알고리즘 책도 조금씩 보고 디자인 패턴도 보고 하다 보면
이제 슬슬 프레임 웍을 어떻게 구성하고 어떤 형태로 작업 하는게 좋겠다는
라인업이 생기게 되는거 같다.

조금더 발전하는 개발자가 되고 향후 계속 개발을 할 수 있는 여건은 항상 기본에 있었던거 같다.

대한민국 개발자.. 모두 화이팅!!
Posted by gsi
:

10년 후 웃으려면… 길게 봐라, 내 재산


편안한 노후 준비됐나요 [上] 표2개로 출발하는 초간단 재무설계

“뭘 먹고 사나” 심각하게 고민해봅시다


금융시장이 급등락 중이다. 서브프라임(비우량주택담보대출) 부실에 따른 미국경기 침체가 계속될 경우 최근 몇 년간 해왔던 방식대로 단순히 펀드 투자에만 의존해서는 돈을 불리기 힘든 상황이 올 가능성이 적지 않다. 이럴 때는 투자의 원점으로 돌아가 보는 것도 좋은 방법이다. 재테크의 기본 목적이라고 할 수 있는 노후 설계 전략을 다시 한번 검토해 보는 시리즈를 2회에 걸쳐 게재한다.

편집자 주

사람이 80세에 가까운 긴 인생을 살아가려면 생애 주기(life cycle)에 따라 큰 돈이 들어가는 시기가 생긴다. 결혼을 할 때는 결혼자금이 필요하고, 아이가 생기면 교육자금이 필요하다. 또 가족이 함께 살 집을 구하려면 주택자금이 필요하고, 은퇴를 한 다음 행복한 노후생활을 보내려면 적절한 은퇴자금이 있어야 한다. 건강한 삶을 살고 직장에서 인정을 받는 것 못지않게 중요한 것이 바로 이런 돈을 제때 준비하는 것이다.수억 원이 들어가는 은퇴자금을 불과 몇 개월 만에 뚝딱 만들어낼 수 없는 것은 너무나 당연한 얘기다.


따라서 자신의 인생 설계도를 그릴 때는 삶의 목표를 실현할 수 있는 자금조달 계획을 함께 만드는 일이 중요하다. 이렇게 인생의 목표를 달성하기 위해 자신의 수입과 지출 흐름을 체크하고 자산과 부채, 투자 전략을 종합적으로 관리해 나가는 것을 ‘재무설계(financial planning)’라고 한다.

재무설계를 할 때 가장 중요한 것은 장기적인 안목으로 투자계획을 실천해 나가는 것이다. 1~2년 내에 기대했던 수익률이 나지 않는다고 하여 투자계획을 허물어 버리면 재테크와 별 차이가 없어져 버린다.

◆ 우선 나의 재무상태표를 만들어 보자

재무설계를 할 때 가장 먼저 해야 하는 것이 자신의 재무상태(재산상태)를 점검하는 일이다. 현재 나의 재산은 얼마이고 부채는 얼마이며, 또 매월 얼마의 소득을 올리고 소비지출은 얼마나 하는지를 살펴보는 것이다.

한국재무설계 오종윤 이사는 “자신의 재무상태를 정확히 진단하려면 재무상태표와 현금흐름표를 직접 만들어 보는 것이 좋다”고 말한다. 재무상태표는 기업들이 작성하는 대차대조표처럼 가계(家計)의 보유 자산과 부채를 종합적으로 파악하는 표이다.

보유 재산상황을 보여주는 자산항목은 크게 유동성자산, 투자자산, 사용자산으로 분류한다. 유동성자산은 수시로 입·출금이 가능한 은행 요구불예금과, 증권회사의 CMA MMF 같은 단기 저축상품을 말한다. 투자자산 항목에는 현재 투자가 진행되고 있는 주식과 펀드, 부동산, 저축성 예금, 연금 상품 등을 적어 넣는다.


또 부채 항목에는 현재 대출을 받아쓰고 있는 은행차입금 등 부채의 잔액을 기재한다. 그리고 자산에서 부채를 뺀 금액(순자산)을 부채 항목 아래에 써 넣으면 재무상태표 작성이 끝난다. 재무상태표를 보면 나의 재산이 현재 주식과 부동산, 예금 상품에 각각 얼마나 투자되어 있는지, 부채는 적정수준으로 관리되고 있는지를 쉽게 알 수 있다.

◆ 두번째 만들어 볼 것은 현금 흐름표

두번째로 만들어 볼 것은 현금흐름표다. 현금흐름표는 가계가 일정기간 동안 벌어들이는 소득액과 지출액을 나란히 정리한 것이다. 다시 말해 현금의 유입과 유출을 나타내는 표이다.

‘유입’ 쪽에는 본인이나 가족이 벌어들이는 소득, 기타 이자 소득 등을 적어 합계를 내 보고, ‘유출’ 쪽에는 고정적으로 나가는 비용, 일시적으로 나가는 비용, 저축과 투자를 나눠서 정리한다.

현금흐름표를 보면 내가 어디에 돈을 많이 쓰고 있는지, 그리고 저축액을 늘리려면 어느 지출 항목을 줄여야 하는지를 일목요연하게 파악할 수 있다. 저축과 투자 생활을 보다 효율적으로 하려는 사람들은 평소에 재무상태표와 현금흐름표를 만들어 재산상황의 변화를 수시로 점검해 보는 것이 필요하다.

◆ 필요한 자금 규모를 파악한 다음 투자를


이렇게 자신의 자산상태를 알고 난 다음에 본격적인 설계를 해 본다.

노후자금과 자녀 교육자금, 결혼자금 마련과 같은 개인의 재무적 목표를 세운 뒤 필요한 자금 규모를 계산해 본다. 이를 앞서 작성한 자신의 재산상태와 비교해 본다. 어느 정도 돈이 필요한지가 나올 것이다. 마지막 단계는 구체적인 투자 계획(plan)을 세운 다음 보유자산의 구성을 변경하거나 투자 상품을 골라 투자하는 것이 필요하다.

◆재무 설계

재무 설계와 재테크는 혼동하기 쉬운 비슷한 말이다. 그러나 재테크와 재무 설계는 개념의 차이가 있다. 재테크는 특별한 투자 계획을 세우기보다는 매순간 가장 좋은 상품을 선택해 돈을 굴리는 기술을 말한다. 쉽게 말해 1~6개월 정도의 단기 투자 위주로 돈을 굴리는 자금운용방식인 것이다. 이에 비해 재무 설계는 최소한 5년 이상 장기 투자 계획을 세워 돈을 체계적으로 관리해나가는 것을 말한다.
Posted by gsi
:

싱글톤 패턴

C++ 2007. 11. 19. 16:46 |

싱글톤 패턴.. - 내가 자주 쓰는 패턴..

class SymbolArray
{
 SymbolArray(void);
public:
 static SymbolArray& GetInstance()
 {
  static SymbolArray sym;
  return sym;
 }
 ~SymbolArray(void);
...
}

///
싱글톤에서 에러를 유발할 수 있는 요소를 아래와 같이 작성해서 처리 합니다.
 SymbolArray();
 SymbolArray(const SymbolArray&) {}
 SymbolArray& operator=(const SymbolArray&) {}
Posted by gsi
: