첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

TestProject.zip
다운로드

▶ 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
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요