1. Resource
application, window 를 포함한 controller 는 Resources 를 멤버로 갖음.
그래서 리소스를 불러올 수 있고, 하위 멤버들에게 모두 적용이 가능함.
그러므로 application 에서 Resources 를 지정하면 이는 전역 리소스가 됨.
반대로 같은 이름이면 함수 스택처럼 가장 가까운 이름의 리소스를 사용함.
1 | <Grid DataContext="{x:Static local:Window1.c2}" | cs |
x:Static 으로 namespace 에서 static으로 선언된걸 가져 올 수 있음.
1 | <Grid DataContext="{StaticResource c3}"> | cs |
StaticResource 로 xaml 내에서 Resource 에 정의된걸 참조 가능.
1 | CustLIst provider = (CustList)this.FindResource("custList"); | cs |
코드에서는 FindResources("KeyName") 으로 가져올 수 있음.
당연하지만 상위 클래스의 리소스만 들고 올 수 있음.
2. NameSpace
C# 의 자료형을 쓰기 위해선 namespace 를 지정할 필요가 있다.
예전에는 xmlns:system = "clr-namespace:System;assembly=mscorlib" 이러고 말았는데
최근에는 xmlns:system = "clr-namespace:System;assembly=System.Runtime" 으로 바꼈다.
스택 오버플로우의 name 스페이스 관련
1 2 3 4 5 6 7 8 | <Window.Resources> <sys:String x:Key="strClass">강좌</sys:String> <x:Array x:Key="cboClassItem" Type="sys:String"> <sys:String>WPF 초급</sys:String> <sys:String>WPF 중급</sys:String> <sys:String>WPF 응용 실무</sys:String> </x:Array> </Window.Resources> | cs |
그럼 위와같이 Resource 에 string 객체, array 등을 만들 수 있다.
3. ObjectDataProvider
1 2 3 4 5 | <ObjectDataProvider x:Key="custList" ObjectType="{x:Type local:RemoteCustListLoader}" MethodName="LoadCustList" IsAsynchronous="True" /> | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class RemoteCustListLoader { public CustList LoadCustList() { //진짜 데이터 없을 때의 더미 데이터 CustList list = new CustList(); list.Add(new Cust { Name = "홍길동", Age = 18 }); list.Add(new Cust { Name = "홍길동", Age = 38 }); list.Add(new Cust { Name = "홍길동", Age = 48 }); list.Add(new Cust { Name = "홍길동", Age = 58 }); list.Add(new Cust { Name = "김철수", Age = 28 }); list.Add(new Cust { Name = "김철수", Age = 18 }); list.Add(new Cust { Name = "김철수", Age = 38 }); list.Add(new Cust { Name = "김철수", Age = 08 }); return list; } } | cs |
이렇게 우리가 원하는 리소스와 더비데이터 등을 xaml 외부에서 들고 올 수 있음.
이때 윈도우 같은 것의 Resource 에 전역으로 만드는게 잘 쓰임.
IsAsynchronous 를 true 로 하지 않으면 서버와 로딩시간이 길거나 하면 화면에 미리보기가 안되니 True 로 해주는게 좋음. 그럼 하다보면 뜸.
1 2 3 4 | <ObjectDataProvider.MethodParameters> <sys:String>20</sys:String> <sys:String>40</sys:String> </ObjectDataProvider.MethodParameters> | cs |
이렇게 파라미터를 넘길 수 있음. 그럼 이걸로 필터링 등 할 수 있음.
1 2 3 4 5 6 | private void btnAdd_Click(object sender, RoutedEventArgs e) { DataSourceProvider provider = (DataSourceProvider)this.FindResource("custList"); CustList list = provider.Data as CustList; list.Add(new Cust("세종대왕", 30)); } | cs |
이렇게 DataSourceProvider 의 Data 에 우리가 원하는 데이터가 있슴.
댓글 없음:
댓글 쓰기