728x90
반응형
728x170
▶ FilterItem.cs
using System;
namespace TestProject
{
/// <summary>
/// 필터 항목
/// </summary>
public class FilterItem
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 제목 - Caption
/// <summary>
/// 제목
/// </summary>
public string Caption { get; set; }
#endregion
#region 필터 - Filter
/// <summary>
/// 필터
/// </summary>
public Predicate<object> Filter { get; set; }
#endregion
}
}
728x90
▶ SampleData.cs
namespace TestProject
{
/// <summary>
/// 샘플 데이터
/// </summary>
public class SampleData
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 숫자 1 - Number1
/// <summary>
/// 숫자 1
/// </summary>
public int Number1 { get; set; }
#endregion
#region 숫자 2 - Number2
/// <summary>
/// 숫자 2
/// </summary>
public int Number2 { get; set; }
#endregion
#region 텍스트 1 - Text1
/// <summary>
/// 텍스트 1
/// </summary>
public string Text1 { get; set; }
#endregion
#region 텍스트 2 - Text2
/// <summary>
/// 텍스트 2
/// </summary>
public string Text2 { get; set; }
#endregion
}
}
300x250
▶ ViewModel.cs
using System.Collections.Generic;
using System.Windows.Data;
using System.ComponentModel;
namespace TestProject
{
/// <summary>
/// 뷰 모델
/// </summary>
public class ViewModel
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 컬렉션 뷰
/// </summary>
private ICollectionView collectionView;
/// <summary>
/// 필터 항목 리스트
/// </summary>
private List<FilterItem> filterItemList;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 컬렉션 뷰 - CollectionView
/// <summary>
/// 컬렉션 뷰
/// </summary>
public ICollectionView CollectionView
{
get
{
if(this.collectionView == null)
{
List<SampleData> list = new List<SampleData>();
for(int i = 0; i < 100; i++)
{
list.Add
(
new SampleData()
{
Number1 = i,
Number2 = i * 10,
Text1 = "row " + i,
Text2 = "ROW " + i
}
);
}
this.collectionView = new ListCollectionView(list);
}
return this.collectionView;
}
}
#endregion
#region 필터 항목 리스트 - FilterItemList
/// <summary>
/// 필터 항목 리스트
/// </summary>
public List<FilterItem> FilterItemList
{
get
{
if(this.filterItemList == null)
{
this.filterItemList = new List<FilterItem>()
{
new FilterItem()
{
Caption = "All items"
},
new FilterItem()
{
Caption = "Even items",
Filter = (item) => { return ((SampleData)item).Number1 % 2 == 0; }
},
new FilterItem()
{
Caption = "Odd items",
Filter = (item) => { return ((SampleData)item).Number1 % 2 == 1; }
}
};
}
return this.filterItemList;
}
}
#endregion
}
}
▶ MainWindow.xaml
<Window x:Class="TestProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
xmlns:local="clr-namespace:TestProject"
Width="800"
Height="600"
Title="ICollectionView 인터페이스 : DXGrid 바인딩 하기"
FontFamily="나눔고딕코딩"
FontSize="16">
<Window.DataContext>
<local:ViewModel />
</Window.DataContext>
<Grid Margin="10">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="10" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel
Grid.Row="0"
Grid.Column="0"
Grid.ColumnSpan="3"
Margin="0 0 0 10"
Orientation="Horizontal">
<CheckBox x:Name="isSynchronizedCheckBox"
VerticalAlignment="Center"
IsChecked="True"
Content="Is Synchronized With Current Item" />
<Label Content="Filter condition : "/>
<ComboBox
ItemsSource="{Binding Path=FilterItemList}"
SelectedValue="{Binding Path=CollectionView.Filter}"
SelectedIndex="0"
DisplayMemberPath="Caption"
SelectedValuePath="Filter"
IsEditable="False" />
</StackPanel>
<dxg:GridControl x:Name="gridControl" Grid.Row="1"
ItemsSource="{Binding Path=CollectionView}"
AutoGenerateColumns="AddNew">
<dxg:GridControl.View>
<dxg:TableView
IsSynchronizedWithCurrentItem="{Binding Path=IsChecked, ElementName=isSynchronizedCheckBox}"
ShowGroupPanel="False"
AllowGrouping="False"
AutoWidth="True"
AllowEditing="False"
ShowAutoFilterRow="True" />
</dxg:GridControl.View>
</dxg:GridControl>
<ListView Grid.Row="1" Grid.Column="2"
ItemsSource="{Binding Path=CollectionView}"
IsSynchronizedWithCurrentItem="True">
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn Header="Number1" DisplayMemberBinding="{Binding Path=Number1}" />
<GridViewColumn Header="Number2" DisplayMemberBinding="{Binding Path=Number2}" />
<GridViewColumn Header="Text1" DisplayMemberBinding="{Binding Path=Text1}" />
<GridViewColumn Header="Text2" DisplayMemberBinding="{Binding Path=Text2}" />
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
▶ MainWindow.xaml.cs
using System.Windows;
namespace TestProject
{
/// <summary>
/// 메인 윈도우
/// </summary>
public partial class MainWindow : Window
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainWindow()
/// <summary>
/// 생성자
/// </summary>
public MainWindow()
{
InitializeComponent();
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'DevExpress > WPF' 카테고리의 다른 글
[DEVEXPRESS/WPF] 엔터티 프레임워크 4.0+을 갖고 서버 모드에서 DXGrid 사용하기 (0) | 2018.02.23 |
---|---|
[DEVEXPRESS/WPF] 인스턴트 피드백 모드 구현하기 (XPO) (0) | 2018.02.23 |
[DEVEXPRESS/WPF] GridControl 클래스 : 엔터티 프레임워크 4.0 연동 인스턴트 피드백 모드 활성화 하기 (0) | 2018.02.23 |
[DEVEXPRESS/WPF] SQL 데이터베이스 변경 사항 저장하기 (0) | 2018.02.23 |
[DEVEXPRESS/WPF] 데이터 주석 적용하기 (0) | 2018.02.21 |
[DEVEXPRESS/WPF] 노드 반복자를 통해 노드를 반복하기 (0) | 2018.02.21 |
[DEVEXPRESS/WPF] TreeListView 클래스 : 동적으로 노드 로드하기 (0) | 2018.02.17 |
[DEVEXPRESS/WPF] 느슨하게 결합된 뷰 모델 사용하기 (0) | 2018.02.17 |
[DEVEXPRESS/WPF] CurrentWindowService 클래스 : 윈도우 닫기 (0) | 2018.02.17 |
[DEVEXPRESS/WPF] BarManager 클래스 : BarSplitButtonItem 항목 생성하기 (0) | 2018.02.02 |
댓글을 달아 주세요