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

■ 마스터/상세 데이터를 바인딩하는 방법을 보여준다.

TestProject.zip
0.01MB

▶ Team.cs

namespace TestProject
{
    /// <summary>
    /// 팀
    /// </summary>
    public class Team
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Property
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 팀명 - Name

        /// <summary>
        /// 팀명
        /// </summary>
        public string Name { get; }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - Team(name)

        /// <summary>
        /// 생성자
        /// </summary>
        /// <param name="name">팀명</param>
        public Team(string name)
        {
            Name = name;
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 문자열 구하기 - ToString()

        /// <summary>
        /// 문자열 구하기
        /// </summary>
        /// <returns>문자열</returns>
        public override string ToString() => Name;

        #endregion
    }
}

 

▶ TeamCollection.cs

using System.Collections.ObjectModel;

namespace TestProject
{
    /// <summary>
    /// 팀 컬렉션
    /// </summary>
    public class TeamCollection : ObservableCollection<Team>
    {
    }
}

 

▶ Division.cs

namespace TestProject
{
    /// <summary>
    /// 부문
    /// </summary>
    public class Division
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Property
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 부문명 - Name

        /// <summary>
        /// 부문명
        /// </summary>
        public string Name { get; }

        #endregion
        #region 팀 컬렉션 - TeamCollection

        /// <summary>
        /// 팀 컬렉션
        /// </summary>
        public TeamCollection TeamCollection { get; }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - Division(name)

        /// <summary>
        /// 생성자
        /// </summary>
        /// <param name="name">부문명</param>
        public Division(string name)
        {
            Name           = name;
            TeamCollection = new TeamCollection();
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 문자열 구하기 - ToString()

        /// <summary>
        /// 문자열 구하기
        /// </summary>
        /// <returns>문자열</returns>
        public override string ToString() => Name;

        #endregion
    }
}

 

▶ DivisionCollection.cs

using System.Collections.ObjectModel;

namespace TestProject
{
    /// <summary>
    /// 부문 컬렉션
    /// </summary>
    public class DivisionCollection : ObservableCollection<Division>
    {
    }
}

 

▶ League.cs

namespace TestProject
{
    /// <summary>
    /// 리그
    /// </summary>
    public class League
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Property
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 리그명 - Name

        /// <summary>
        /// 리그명
        /// </summary>
        public string Name { get; }

        #endregion
        #region 부문 컬렉션 - DivisionCollection

        /// <summary>
        /// 부문 컬렉션
        /// </summary>
        public DivisionCollection DivisionCollection { get; }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - League(name)

        /// <summary>
        /// 생성자
        /// </summary>
        /// <param name="name">리그명</param>
        public League(string name)
        {
            Name               = name;
            DivisionCollection = new DivisionCollection();
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 문자열 구하기 - ToString()

        /// <summary>
        /// 문자열 구하기
        /// </summary>
        /// <returns>문자열</returns>
        public override string ToString() => Name;

        #endregion
    }
}

 

▶ LeagueCollection.cs

using System.Collections.ObjectModel;

namespace TestProject
{
    /// <summary>
    /// 리그 컬렉션
    /// </summary>
    public class LeagueCollection : ObservableCollection<League>
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - LeagueCollection()

        /// <summary>
        /// 생성자
        /// </summary>
        public LeagueCollection()
        {
            League   league;
            Division division;

            Add(league = new League("League A"));

            league.DivisionCollection.Add(division = new Division("Division A"));

            division.TeamCollection.Add(new Team("Team I"  ));
            division.TeamCollection.Add(new Team("Team II" ));
            division.TeamCollection.Add(new Team("Team III"));
            division.TeamCollection.Add(new Team("Team IV" ));
            division.TeamCollection.Add(new Team("Team V"  ));

            league.DivisionCollection.Add(division = new Division("Division B"));

            division.TeamCollection.Add(new Team("Team Blue"  ));
            division.TeamCollection.Add(new Team("Team Red"   ));
            division.TeamCollection.Add(new Team("Team Yellow"));
            division.TeamCollection.Add(new Team("Team Green" ));
            division.TeamCollection.Add(new Team("Team Orange"));

            league.DivisionCollection.Add(division = new Division("Division C"));

            division.TeamCollection.Add(new Team("Team East" ));
            division.TeamCollection.Add(new Team("Team West" ));
            division.TeamCollection.Add(new Team("Team North"));
            division.TeamCollection.Add(new Team("Team South"));

            Add(league = new League("League B"));

            league.DivisionCollection.Add(division = new Division("Division A"));

            division.TeamCollection.Add(new Team("Team 1"));
            division.TeamCollection.Add(new Team("Team 2"));
            division.TeamCollection.Add(new Team("Team 3"));
            division.TeamCollection.Add(new Team("Team 4"));
            division.TeamCollection.Add(new Team("Team 5"));

            league.DivisionCollection.Add(division = new Division("Division B"));

            division.TeamCollection.Add(new Team("Team Diamond"));
            division.TeamCollection.Add(new Team("Team Heart"  ));
            division.TeamCollection.Add(new Team("Team Club"   ));
            division.TeamCollection.Add(new Team("Team Spade"  ));

            league.DivisionCollection.Add(division = new Division("Division C"));

            division.TeamCollection.Add(new Team("Team Alpha"  ));
            division.TeamCollection.Add(new Team("Team Beta"   ));
            division.TeamCollection.Add(new Team("Team Gamma"  ));
            division.TeamCollection.Add(new Team("Team Delta"  ));
            division.TeamCollection.Add(new Team("Team Epsilon"));
        }

        #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:local="clr-namespace:TestProject"
    Width="800"
    Height="600"
    Title="TestProject"
    FontFamily="나눔고딕코딩"
    FontSize="16">
    <Window.Resources>
        <local:LeagueCollection x:Key="LeagueCollectionKey" />
    </Window.Resources>
    <Grid
        Margin="10"
        DataContext="{Binding Source={StaticResource LeagueCollectionKey}}">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*"    />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"  />
            <ColumnDefinition Width="10" />
            <ColumnDefinition Width="*"  />
            <ColumnDefinition Width="10" />
            <ColumnDefinition Width="*"  />
        </Grid.ColumnDefinitions>
        <Label Grid.Row="0" Grid.Column="0">My Soccer Leagues</Label>
        <ListBox Grid.Row="1" Grid.Column="0"
            IsSynchronizedWithCurrentItem="true"
            ItemsSource="{Binding}" />
        <Label Grid.Row="0" Grid.Column="2"
            Content="{Binding Path=Name}" />
        <ListBox Grid.Row="1" Grid.Column="2"
            IsSynchronizedWithCurrentItem="true"
            ItemsSource="{Binding Path=DivisionCollection}" />
        <Label Grid.Row="0" Grid.Column="4"
            Content="{Binding Path=DivisionCollection/Name}" />
        <ListBox Grid.Row="1" Grid.Column="4"
            ItemsSource="{Binding Path=DivisionCollection/TeamCollection}" />
    </Grid>
</Window>
728x90
그리드형(광고전용)
Posted by icodebroker
,