1. 程式人生 > >使用Blend的繫結資料來源(1)

使用Blend的繫結資料來源(1)

前些日子看老外為什麼做SL的時候,可以不用像我們在VS裡面寫一大堆的繫結程式碼,於是自己在家 瞎掰了一個週末,終於發現Blend的一些用法,感覺很不錯!就寫出來留個紀念!萬一

那天專案要用SL,就可以讓美工來學學! 呵呵! (雖然我們經理不看好SL,!!..可能永遠沒機會用)

用Blend繫結資料來源

1.新建一個專案

2.把切換到VS裡面去編輯,點選 "Edit in Visual Studio" 在Blend裡面切換到Blend繫結 3.加入如下程式碼:

namespace BlendBinding

{

	public partial class Page : UserControl

	{

		public Page()

		{

			// Required to initialize variables

			InitializeComponent();

		}

	}// end for class

    public class User:System.ComponentModel.INotifyPropertyChanged

    {



        public User():this("null")//加入預設構造

        {



        }

        public User(string userName)

        {

            this.userName = userName;

        }



        private string userName = null;



        public string UserName

        {

            get { return userName; }

            set { userName = value;

            NotifyPropertyChanged("UserName");

            }

        }

    



        public void NotifyPropertyChanged(string propertyName)

        {

            if (PropertyChanged != null)

            {

                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));

            }

        }







        #region INotifyPropertyChanged Members



        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;



        #endregion

    }// end for class



    public class UserDataProvider

    {

        public UserDataProvider()

        {

            this.userList = new List<User>();

            this.userList.Add(new User("u1"));

            this.userList.Add(new User("u2"));

            this.userList.Add(new User("u3"));

            this.userList.Add(new User("u4"));

        }



        private List<User> userList = null;



        public List<User> UserList

        {

            get { return userList; }

            set { userList = value; }

        }



        



    }// end for class

}

後面再解釋為什麼要這麼做.

4.編輯完程式碼轉到Blend下面:

Blend的Data面版

點選 "+CLR Object"

資料繫結對話方塊

完成後的效果

5.把工具欄中的ListBox拖動到介面,再把 UserDataProvider(在Data面版中)拖到ListBox上 拖動CLR物件

 完成後的樣子如下:

 完成樣子

現在來解釋程式碼: public class User:System.ComponentModel.INotifyPropertyChanged 為什麼裡面有這樣一句,要實現這個介面,呵呵! 因為實現這個接口才可以雙向繫結,那麼不實現這個介面呢? 如果在UserDataProvider不實現的話,在Blend中”+CLR ”的時候就不會出現UserDataProvider(UserList) 再來看Xaml 在<UserControl.Resources/>中多了一句 <BlendBinding:UserDataProvider x:Key="UserDataProviderDS" d:IsDataSource="True"/> 這句就是直接在介面上生成物件的方法,以前老以為Silverlight沒有這個功能, WPF才有 <ListBox Margin="90,77,266,186" ItemsSource="{Binding Mode=OneWay, Path=UserList, Source={StaticResource UserDataProviderDS}}"/> 當然ListBox這個也發生了變化

 看不明白就去微軟的msdn上看