Interface => IDataErrorInfo

Introduction to common Interfaces

IDataErrorInfo

Provides the functionality to offer custom error information that a user interface can bind to. 

.NET Framework Supported in: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile Supported in: 4, 3.5 SP1

Example 1:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace IDataErrorProviderExample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //var person = new Person();
            var person = new Person { Age = 10 };
            //var person = new Person { Age = 200 };
            //ageTextBox.DataBindings.Add("Text", person, "Age", true, DataSourceUpdateMode.OnPropertyChanged, null, "No");
            ageTextBox.DataBindings.Add("Text", person, "Age", true, DataSourceUpdateMode.OnPropertyChanged);

            //case 1
            errorProvider1.DataSource = person;

            //case 2
            //errorProvider1.SetError(ageTextBox, "==="); //temp
        }
    }

    public class Person : IDataErrorInfo
    {
        private int age;

        public int Age
        {
            get { return age; }
            set { age = value; }
        }

        public string Error
        {
            get
            {
                //check validation on every property
                return "";
            }
        }

        public string this[string name]
        {
            get
            {
                string result = null;

                switch (name)
                {
                    case "Age":
                        if (this.age < 0 || this.age > 150)
                        {
                            result = "Age must not be less than 0 or greater than 150.";
                        }
                        break;
                    default:
                        break;
                }

                return result;
            }
        }
    }
}
View Code

 

IEnumerable<T>  foreach 的关系  

 Using corecursion to create an IEnumerable<int> sequence is made simple with the yield return syntax.
private static IEnumerable<T> Unfold<T>(T seed, Func<T, T> accumulator)
{
var nextValue = seed;
while (true)
{
yield return nextValue;
nextValue = accumulator(nextValue);
}
}

The code above could be used to produce the sequence of natural numbers like this.
var naturalNumbers = Unfold(1, i => i + 1);
Console.WriteLine("1st 10 Natural numbers");
foreach (var naturalNumber in naturalNumbers.Take(10))
{
Console.WriteLine(naturalNumber);
}
View Code

 

posted @ 2014-09-07 16:28  kevinygq  阅读(152)  评论(0编辑  收藏  举报