10월, 2011의 게시물 표시

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 Bootstrapper :

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(&a);             IntPtr pt4 = new IntPtr(&b);             Console.WriteLine(pt3.ToString("x"));             Console.WriteLine(pt4.ToString("x"));         } 확인해보면 Int64는 8바이트, Int32는 4바이트 만큼 주소가 증가했음을 알 수 있다.

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(',')                 group n by n into g                 where g.Count() > 1                 select g;             foreach (var a in r)             {                 Console.WriteLine(a.Key );             }

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