[WPF] 공공데이터 포털 API 이용 클라이언트 구현 Part 3

이미지
그룹핑 ListViewItem 그룹핑 할 수 있습니다. 먼저 CheckBox에 Checked 이벤트를 통해 그룹핑을 추가하고 RemoveChecked 이벤트를 통해 그룹핑을 제거 할 수 있도록 CheckBox를 선언 합니다. 1: <!-- Group CheckBox --> 2: <CheckBox Grid.Column="0" 3: Grid.Row="0" 4: Checked="AddGrouping" 5: Unchecked="RemoveGrouping">Group by Name</CheckBox> 그룹 스타일 선언 GroupStyle 속성에 ContainerStyle 속성을 이용해 Style을 지정 합니다. Expander 컨트롤을 이용해 아파트명과 그룹 아이템의 개수를 Expander Header에 표시 하도록 ControlTemlate를 선언 합니다. 1: <!-- Group Style --> 2: <ListView.GroupStyle> 3: <GroupStyle> 4: <GroupStyle.ContainerStyle> 5: <Style TargetType="{x:Type GroupItem}"> 6: <Setter Property="Margin" Value="0,0,0,5" /> 7: <Setter Property="Te...

MSDN WPF 샘플 따라하기 - BindConversion

BindConversion

Converter는 원본과 대상이 서로 다른 데이터 형식을 갖고 있거나 일부 변환이 필요한 경우 원본과 대상 사이의 다리 역할을 합니다. 바인딩 시 데이터를 변환 하려면 Convert 및 ConvertBack 메서드를 포함하는 IValueConverter 인터페이스를 구현 해야 합니다.

이 예제는 날짜 타입 데이터가 바인딩 속성 타입에 따라 Brushes 또는 날짜 시간 문자열로 변환하는 역할을 하는 Converter를 구현 합니다.

  • DateTime 속성을 가진 클래스를 정의 합니다.
1:  public class MyData : INotifyPropertyChanged  
2:    {  
3:      private DateTime _thedate;  
4:      public DateTime TheDate  
5:      {  
6:        get { return _thedate; }  
7:        set { _thedate = value; }  
8:      }  
9:      public MyData()  
10:      {  
11:        _thedate = DateTime.Now;  
12:      }  
13:      public event PropertyChangedEventHandler PropertyChanged;  
14:      protected void OnPropertyChanged(string propertyName)  
15:      {  
16:        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));  
17:      }  
18:    }  
  • IValueConverter 인터페이스를 구현 합니다.
1:  public class MyConverter : IValueConverter  
2:    {  
3:      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)  
4:      {  
5:        var date = (DateTime)value;  
6:        switch (targetType.Name)  
7:        {  
8:          case "String":  
9:            return date.ToString("F", culture);  
10:          case "Brush":  
11:            return Brushes.Red;  
12:          default:  
13:            return value;  
14:        }  
15:      }  
16:      public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)  
17:      {  
18:        throw new NotImplementedException();  
19:      }  
20:    }  

Convert 메서드는 value 변수를 통해 원본 데이터를 참조 하여 Object 형식의 데이터를 반환 하도록 구현 하며, ConvertBack 메소는 TwoWay 바인딩일 경우 구현 하도록 합니다.

  • 로컬 리소스 선언
1:  <local:MyData x:Key="MyDataSource" />  
2:  <local:MyConverter x:Key="MyConvertReference" />  

  • StackPanel의 DataContext로 MyDataSource를 사용합니다. 이로써 StackPanel 하위 트리에 있는 엘레먼트는 MyDataSource의 속성 값을 공유 받을 수 있습니다.
1:  <StackPanel.DataContext>  
2:        <Binding Source="{StaticResource MyDataSource}" />  
3:      </StackPanel.DataContext>  

  • 하나의 TextBlock은 날짜 문자열을 바인딩 하고 다른 하나의 TextBlock은 Converter를 이용해 Foreground속성은 Brushes로, Text 속성은 날짜,시간 문자열로 변환 합니다.
1:  <TextBlock Text="Unconverted data:" />  
2:      <TextBlock Text="{Binding Path=TheDate}" />  
3:      <TextBlock Text="Converted data:"/>  
4:      <TextBlock Name="myConvertedtext"  
5:            Foreground="{Binding Path=TheDate, Converter={StaticResource MyConvertReference}}">  
6:        <TextBlock.Text>  
7:          <Binding Path="TheDate"  
8:               Converter="{StaticResource MyConvertReference}" />  
9:        </TextBlock.Text>  
10:      </TextBlock>  




댓글

이 블로그의 인기 게시물

[C#] Task 완료 시 다른 Task를 자동으로 수행

[C#] 태스크(Task)가 완료될 때 까지 대기하여 결과를 얻는 방법

[C#] 명시적으로 Task 생성 및 실행