Combobox绑定的一段代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.ComponentModel;
using System.Collections.ObjectModel;
using System.Windows.Data;

namespace Play
{
    public partial class Page : UserControl
    {
        people p = new people { cityid = 2, name = "Jim" };

        public Page()
        {
            InitializeComponent();


            ObservableCollection<city> citys = new ObservableCollection<city>();
            citys.Add(new city { id = 1, name = "北京" });
            citys.Add(new city { id = 2, name = "福建" });
            citys.Add(new city { id = 3, name = "山西" });
            citys.Add(new city { id = 4, name = "广东" });

            this.comboBox1.ItemsSource = citys;
            this.comboBox1.DisplayMemberPath = "name";
            this.comboBox1.UpdateLayout();
            this.comboBox1.SelectedIndex = -1;


            Binding bind = new Binding("cityid");
            bind.Mode = BindingMode.TwoWay;
            bind.Converter = new CityidConverter(citys);
            this.comboBox1.SetBinding(ComboBox.SelectedItemProperty, bind);
            this.comboBox1.DataContext = p;
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            this.textBox1.Text = p.ToString();
        }

    }


    public class city : INotifyPropertyChanged
    {
        int _id;
        string _name;

        public int id { get{return _id;}
            set
            {
                if (value != _id)
                {
                    _id = value;
                    RaisePropertyChanged("id");
                }
            }
        }
        public string name { get { return _name; }
            set
            {
                if (value != _name)
                {
                    _name = value;
                    RaisePropertyChanged("name");
                }
            }
        }

        protected void RaisePropertyChanged(string propertyName)
        {
            if ((PropertyChanged != null))
            {
                PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }

    public class people : INotifyPropertyChanged
    {
        string _name;
        int _cityid;

        public string name
        {
            get { return _name; }
            set
            {
                if (value != _name)
                {
                    _name = value;
                    RaisePropertyChanged("name");
                }
            }
        }
        public int cityid
        {
            get { return _cityid; }
            set
            {
                if (value != _cityid)
                {
                    _cityid = value;
                    RaisePropertyChanged("cityid");
                }
            }
        }

        public city city { get; set; }

        public event PropertyChangedEventHandler PropertyChanged;
        protected void RaisePropertyChanged(string propertyName)
        {
            if ((PropertyChanged != null))
            {
                PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
            }
        }

        public override string ToString()
        {
            return "cityid=" + cityid + "  " + "name=" + name;
        }
    }

    public class CityidConverter : IValueConverter
    {
        ObservableCollection<city> Citys;
        public CityidConverter(ObservableCollection<city> citys)
        {
            Citys = citys;
        }


        #region IValueConverter Members

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            int cityid = (int)value;

            //LINQ貌似很方便
            return Citys.Where(c => cityid == c.id).First();

            //var list = from city in Citys
            //           where city.id == cityid
            //           select city;

            //foreach (var city in list)
            //{
            //    return city;
            //}

            //foreach (var city in Citys)
            //{
            //    if (city.id == cityid)
            //    {
            //        return city;
            //    }
            //}
            //return null;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            city c = value as city;
            return c.id;
        }

        #endregion
    }


}

posted @ 2010-10-12 17:55  牛小浩  阅读(765)  评论(0编辑  收藏  举报