C#のデータバインディングコントロールについて教えてください
Posted: 2012年9月23日(日) 10:28
フォームにラベルを作り、そこに日付を表示させようと思っています。
タイマーイベントを1秒間隔で設定し、プロパティ内のセットアクセサで日付と時間を取得しています。
データバインディングコントロールをラベルにバインドし、プロパティが書き換えられると同時に
バインドさせたラベルの文字列を書き換えて時計を作ろうかと思ったのですが
起動した時刻が表示されたっきりで、そのあとラベルのテキストが更新されません
また、コンストラクタに のような初期化の記述をしないと、起動時の時刻も表示されません。
データバインディングは双方向で表示と変数の設定をしてくれると思ったのですが違うのでしょうか。
ぜひご教授をお願いします。
タイマーイベントを1秒間隔で設定し、プロパティ内のセットアクセサで日付と時間を取得しています。
データバインディングコントロールをラベルにバインドし、プロパティが書き換えられると同時に
バインドさせたラベルの文字列を書き換えて時計を作ろうかと思ったのですが
起動した時刻が表示されたっきりで、そのあとラベルのテキストが更新されません
また、コンストラクタに のような初期化の記述をしないと、起動時の時刻も表示されません。
データバインディングは双方向で表示と変数の設定をしてくれると思ったのですが違うのでしょうか。
ぜひご教授をお願いします。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace 時計の政策
{
public partial class Form1 : Form
{
private Clock _cl;
public Form1()
{
InitializeComponent();
}
//タイマーイベント
private void timer1_Tick(object sender, EventArgs e)
{
_cl.GetDate();
}
private void Form1_Load(object sender, EventArgs e)
{
//タイマーの設定
timer1.Interval = 1000;//1秒に一回
timer1.Start();
_cl = new Clock();
//データソースの設定
clockBindingSource.DataSource = _cl;
}
}
public class Clock{
private string str;
//ラベルに表示するプロパティ
public string propstr{
set { str = DateTime.Now.ToString();}
get { return str; }
}
//コンストラクタ
public Clock(){
propstr = "";
}
//イベントを宣言
#region INotifyPropertyChanged メンバ
public event PropertyChangedEventHandler PropertyChanged;
#endregion
//イベントの実装
public void NotifyPropertyChanged(string info)
{
if (PropertyChanged != null)
{
//デリゲートを介してイベントを発生させる
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
//日付の取得
public void GetDate(){
//イベントの発生
propstr = "";
NotifyPropertyChanged("propstr");
}
}
}