Avalondock + UnityContainer (1)

이미지
처음하는 C#이라 정리하면서 개념 좀 확실해 주입할려고 포스팅한다. 요구사항은 창들이 VisualStudio 처럼 docking 가능해야한다. 각 모듈은 가능한 독립적으로 개발 가능해야 한다.(협업) 나머지 요구사항은 지금 정리하고자 하는 내용과는 관계없어 일단 Dock 가능한 라이브러리와 패턴앤프랙틱스의 Composite Application Library 부분만 정리할려고 한다. Avalondock    코드플렉스( http:// avalondock .codeplex.com ) 에서 다운받을수 있으며 샘플이 제공된다. Visual Studio 와 같은 Dock 기능을 제공한다. Composite Application Library   CAB(Composite Application Block) 의 WPF 버전( http://msdn.microsoft.com/en-us/library/ff648611.aspx )으로 MVVM 패턴을 손쉽게 구현할수 있다. 요즘 많이 사용하는 프레임워크의 기본적인 IoC(Inversion of Control) , Container 등 내가 필요한 것만 있고, 적당한 예제가 있어서 선택했다. 그리고, EventAggregator 패턴이 구현되어 있어 모듈간 종속없이 통신할수 있어 결합도를 낮출수 있다. 1. 준비 VisualStudio(VS)에서 새프로젝트 만들기를 선택하고 템플릿에서 "WPF 응용프로그램"을 선택한다. 프로젝트가 생성되면 App.xaml 에서 StartupUri 를 제거한다. Window1.xaml 을 제거하고 Shell.xaml을 추가한다. 다운받은 Avalondock Manger 와 CAL을 참조추가 해준다.( 프로젝트에 LIB를 만들어 DLL파일을 넣고 참조하였음) Bootstrapper.cs 파일을 추가하고 UnityBootstrapper 를 상속받아 CreateShell을 구현한다. public class Bootstrappe...

C#에서 포인터 사용

훈스닷넷에 답글달고 정리 차원에서 남겨둔다. C#에서는 C에서 처럼 포인터를 사용할수가 있다. 빌드옵션에서 안전하지 않은 코드 check 해주고 다음과 같은 방법으로 한다.         static void Main(string[] args)         {             foo();         }         unsafe static void foo()         {             Int64 aa = 123456789;             Int64 bb = 123222;             IntPtr pt = new IntPtr(&aa);             IntPtr pt2 = new IntPtr(&bb);             Console.WriteLine(pt.ToString("x"));             Console.WriteLine(pt2.ToString("x"));             Int32 a = 1234231;             Int32 b = 154324;             IntPtr pt3 = new IntPtr(...

C# LINQ 예제

문자열에서 중복되는 값을 찾고 싶을때 LINQ 를 이용해서 아래와 같이 하면 된다. ( LINQ 오늘 처음 써봐서 예제가 허접합니다)             string t = "a,b,c,d,e,e,e,f,g";             var r =                 from n in t                 group n by n into g                 where g.Count() > 1                 select g;             foreach (var a in r)             {                 Console.WriteLine(a.Key );             } , 도 문자열로 인식되서 split 해줬다.             string t = "a,b,c,d,e,e,e,f,g";             var r =                 from n in t.Split(',')       ...

WPF 드래그앤드랍

어떤 분이 질문을 올리셨길레 궁금해서 해보았다. 연습삼아 ListView에 Button 을 넣어주고 드래그해서 canvas에 놓는 테스트이다. 먼저 Xaml <Window x:Class="WpfApplication3.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="342" Width="300"> <Grid Height="253" Width="269"> <Grid.ColumnDefinitions> <ColumnDefinition Width="15*" /> <ColumnDefinition Width="131*" /> </Grid.ColumnDefinitions> <Canvas x:Name="mycanvas" DragDrop.DragOver="mycanvas_DragOver" DragDrop.DragEnter="Canvas_DragEnter" DragDrop.DragLeave="mycanvas_DragLeave" Drop="mycanvas_Drop" Mouse.MouseMove="Canvas_MouseMove...

노트북 백 라이트 교체

이미지
몇년전에 올린 게시물인데, 가져왔다. LED 아닌이상 모두 백라이트를 사용할 것 같고, 수리도 마찬가지일것 같아서 다시 포스팅 해놓는다. 영어 공부겸 영어로도 남긴다.(발영어) 테두리를 덮고 있는 케이스를 뜯어 낸모습.(Remove top case) 판넬을 분리하기전 뒤쪽 커넥터.( LCD Connector before remove from LCD panel) LCD 판넬 뒷모습(Back side of LCD panel). 아래쪽에 문제의 고장난 백라이트 커넥터가 보인다.(Connector of The Broken BackLight , bottom of LCD panel) 분리된 백라이트. 타서 끊어져있었다.( The Broken BackLight. The BackLight was cutted why was burn) 교체하는 사진을 찍지 못했다.(I missed picture while change the backlight) 백라이트를 교체한 후사진이다.(The figure that backlight is changed) 처음해보는거라 2시간 가량 걸린것 같다. ( It take about 2 hours cuz I don't have experience) 얻어온 금박 테이프가 넓어서 가위로 반톡막내 붙이기 전 사진.( Gold foil tape was wide. so I cutted the tape) 케이스를 조립하기전 테스트 화면.(Test before assemble the laptop) 사진은 잘나왔는데, 처음엔 화면이 하얗게 나와서 전부다 분리하고 다시 조립하고를 2시간가량 했더니 허리가 끊어질것 같았다.(Actually figure is good. but at fist assemble LCD was just WHITE. So I disassemble all unit and assemble again twice. I felt My waist were cutted)

WPF RichTextBox 와 Document의 바인딩

MVVM 패턴을 이용해서 View의 TextBox 등에 바인딩은 간단하게 <TextBox Text="{Binding mystring}"/> 이렇게 하면 된다. RichTextBox 도 마찬가지 일것 같지만, 해보면 안된다. 먼저 RichTextBox가 Content를 표현하는 구조를 알아야 되는데, 그건, 다음에 정리하고, 바인딩 하는 방법은 아래와 같다. 먼저 ViewModel 을  DependencyObject 를 상속고 DependencyProperty 를 정의해준다. public class MyViewModel : DependencyObject { public FlowDocument Document { get { return (FlowDocument)GetValue(DocumentProperty); } set { SetValue(DocumentProperty, value); } } public static readonly DependencyProperty DocumentProperty = DependencyProperty.Register("Document", typeof(FlowDocument), typeof(MyViewModel), new PropertyMetadata(OnDocumentChanged)); public void OnDocumentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { } } 그 다음 View 의 code-behind 의 생성자에 InitializeComponent(); Binding b = new Binding("Document"); b.Source = richTextBox; b.Mode = BindingMode.OneWay; BindingOperations.SetB...

C# 정규식

.Net에서는 정규식을 위해 Regex 라는 클래스를 제공한다. Regex 클래스는 System.Text.RegularExpressions 네임스페이스에 있다. 우선 전화번호는 Regex regex = new Regex(@"\d{3}-\d{3,4}-\d{4}"); \d 는 [0-9] 와 같은 표현식이며 실제로 전화번호는 전부 0으로 시작하기때문에 0 이라고 써도된다. Regex regex = new Regex(@"0\d{2}-\d{3,4}-\d{4}"); 두번째 자리는 핸드폰의 경우는 모두 1 이므로 아래와 같이 수정할수 있다. Regex regex = new Regex(@"01\d-\d{3,4}-\d{4}"); {n} 은 반복되는 횟수이다. \d 는 숫자라는 뜻이다. 첫번째 \d{3} 은 숫자가 3개 반복된다는 뜻이다. 대쉬 "-" 는 그대로 인식된다. \d{3,4} 는 숫자가 3자리에서 4자리라는 표현이다. 여기까지면 전화번호 표현은 끝이다. 첫번째 표현은 아래와 같이 다르게 표현할수 있다. Regex regex = new Regex(@"[0-9]{3}-[0-9]{3,4}-[0-9]{4}"); [0-9] 는 0에서 9 사이의 문자가 올수 있다는 뜻이다. [0-9]{3} 는 0에서 9사이의 문자가 3번 반복된다는 뜻이다. 그럼, 아래 예제를 실행해보자. static void Main(string[] args) { Regex regex = new Regex(@"\d{3}\-\d{3,4}\-\d{4}$"); string[] target = { "011-333-1234", ...