SQLの窓

2013年10月27日


WPF(C#) : 『DataGrid に、バインド用クラスを使って自動的にカラムと行を生成する』 テンプレート

SkyDrive へ移動



※ Window の背景にイラスト画像を使用しています

DataGrid の重要なプロパティ
ItemsSource="{Binding mail_data}"
AutoGenerateColumns="True"
CanUserAddRows="false"
MainWindow.xaml
<Window x:Class="WPF_MailGet.MainWindow"
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
	xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
	mc:Ignorable="d"
	Title="MainWindow"
	Height="719"
	Width="805"
	BorderBrush="Black"
	BorderThickness="1">
	<Window.Background>
		<ImageBrush
			ImageSource="/WPF_MailGet;component/Images/back_001.jpg"
			Stretch="UniformToFill"
			TileMode="None" />
	</Window.Background>
	<!-- このウインドウのリソース -->
	<Window.Resources>

		<Style
			TargetType="{x:Type ListView}">
			<Setter
				Property="ItemContainerStyle">
				<Setter.Value>
					<Style
						TargetType="ListViewItem">
						<Setter
							Property="VerticalContentAlignment"
							Value="Top" />
					</Style>
				</Setter.Value>
			</Setter>
		</Style>
		
		<!-- 一覧データ 用の表示部品定義 -->
		<DataTemplate
			x:Key="ListFromTemplate">

			<StackPanel
				HorizontalAlignment="Left"
				Width="60">
				<TextBlock
					Text="{Binding from}"
					TextWrapping="Wrap"
					Padding="4" />
			</StackPanel>

		</DataTemplate>
		
		<DataTemplate
			x:Key="ListSubjectTemplate">
			
			<StackPanel
				Margin="0,0,0,17"
				Width="250">
				<Border
					BorderThickness="1"
					BorderBrush="Black"
					Padding="4"
					Height="50">
				<TextBlock
					Text="{Binding subject}"
					TextWrapping="Wrap" />
				</Border>
			</StackPanel>

		</DataTemplate>
	</Window.Resources>
	
	<Grid
		AllowDrop="True">
		<Grid.RowDefinitions>
			<RowDefinition
				Height="70*" />
			<RowDefinition
				Height="608*" />
		</Grid.RowDefinitions>
		
		<!--実行ボタン-->
		<Button
			Name="actButton"
			Content="データ表示"
			Height="35"
			HorizontalAlignment="Left"
			Margin="40,26,0,0"
			VerticalAlignment="Top"
			Width="154"
			Click="actButton_Click" />

		<!--一覧表示-->
		<DataGrid
			Grid.Row="1"
			Height="534"
			HorizontalAlignment="Left"
			Margin="40,0,0,0"
			Name="dataGrid1"
			VerticalAlignment="Top"
			Width="700"
			Background="#C5FFFFFF"
			MouseDoubleClick="dataGrid1_MouseDoubleClick"
			ItemsSource="{Binding mail_data}"
			AutoGenerateColumns="True"
			CanUserAddRows="false"
			IsReadOnly="True">
			<!--<DataGrid.Columns>
				<DataGridTemplateColumn
					Header="差出人"
					CellTemplate="{StaticResource ListFromTemplate}">
				</DataGridTemplateColumn>
				<DataGridTemplateColumn
					Header="件名"
					CellTemplate="{StaticResource ListSubjectTemplate}">
				</DataGridTemplateColumn>
			</DataGrid.Columns>-->
		</DataGrid>
		
	</Grid>
</Window>

コメント部分は、カラムをテンプレートで作成してカスタマイズする場合に使用します。

MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Net;
using System.Windows;
using System.Windows.Input;
using System.Collections.ObjectModel;

namespace WPF_MailGet {
	public partial class MainWindow : Window {

		private MainViewModel mvm = new MainViewModel();
		// *********************************************
		// コンストラクタ
		// *********************************************
		public MainWindow() {
			InitializeComponent();

			this.dataGrid1.DataContext = mvm;
		}

		private void actButton_Click(object sender, RoutedEventArgs e) {

			mvm.mail_data.Add(new ItemViewModel() {
				from = "Button@event.DataGrid.wpf",
				subject = "DataGrid は自動カラム作成が有効です",
				mdate = "2013/10/26 19:00:30",
			});
		}

		private void dataGrid1_MouseDoubleClick(object sender, MouseButtonEventArgs e) {
			Debug.WriteLine(dataGrid1.SelectedIndex);

			mvm.mail_data.Add(new ItemViewModel() {
				from = "DoubleClick@event.DataGrid.wpf",
				subject = "CanUserAddRowsは、\n意図的に false にする必要があります",
				mdate = "2013/10/26 19:00:30",
			});

			mvm.mail_data[0].mdate = "0000/00/00";

		}

	}
}


MainViewModel.cs
using System;
using System.ComponentModel;
using System.Collections.ObjectModel;

namespace WPF_MailGet {

	// *********************************************
	// バインドする一覧データのを定義するクラス
	// *********************************************
	public class MainViewModel : MainBaseModel {
		// *****************************************************
		// コンストラクタ
		// *****************************************************
		public MainViewModel() {
			mail_data = new ObservableCollection<ItemViewModel>();
		}

		// *****************************************************
		// バインド用のコレクションのプロパティ
		// *****************************************************
		public ObservableCollection<ItemViewModel> mail_data { get; set; }

	}
}

ItemViewModel.cs
using System;
using System.ComponentModel;

namespace WPF_MailGet {
	// *********************************************
	// バインドする一覧データの構造を定義するクラス
	// *********************************************
	public class ItemViewModel : ItemBaseModel {

		// *********************************************
		// from エントリ
		// *********************************************
		private string _from;
		public string from {
			get { return _from; }
			set {
				SetAndNotifyString(GetName(() => from), ref _from, value);
			}
		}

		// *********************************************
		// subject エントリ
		// *********************************************
		private string _subject;
		public string subject {
			get { return _subject; }
			set {
				SetAndNotifyString(GetName(() => subject), ref _subject, value);
			}
		}

		// *********************************************
		// mdate エントリ
		// *********************************************
		private string _mdate;
		public string mdate {
			get { return _mdate; }
			set {
				SetAndNotifyString(GetName(() => mdate), ref _mdate, value);
			}
		}

	}
}



【VS(C#)の最新記事】
posted by lightbox at 2013-10-27 00:47 | VS(C#) | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり