摘要:[Windows Store App] 使用XML與C#程式碼建立資料繫結
前言
在Windows Store App使用XAML設計UI時,使用資料繫結是個很好的做法,
程式運算的動作應該面對的是資料,資料再面對UI,
這在程式不在主執行緒運算時非常有用。
傳統使用XAML的作法
首先我們先建立好自己的Data class
using Windows.UI.Xaml.Navigation;
public class MyData : INotifyPropertyChanged
{
int member;
public int Member
{
set
{
member = value;
NotifyPropertyChanged("Member");
}
get { return member; }
}
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{ PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); }
}
}
這裡面只用一個member成員當做範例,
小寫的是資料的本體,大寫的是對外的屬性,
member底下是實作INotifyPropertyChanged介面的事件與方法,
意即每當數值被改動,就發出一個事件提醒介面需要更新,
需要注意的就是,屬性的set中,該字串一定要跟那個屬性的命名一樣,
就像這個例子中,一定要是"Member"
接下來在主程式的頁面中建構資料,在主類別內加入
public MyData mydata = new MyData;
以及在建構式中將這筆資料設定為DataContext
this.DataContext = mydata;
這麼一來資料的設定就完成了,要將資料繫結到XAML上相對簡單,
例如要把這個int繫到一個TextBlock的Text上去就是
<TextBlock x:Name="textblock" Text="{Binding Member,Mode=OneWay}"/>
OneWay就是只有資料會被繫到這個UI上,UI無法更改資料,
所以當然也會有TwoWay,也就是雙向的,
例如如果這是一個TextBox,TextBox所做的更改也會返回到資料上
使用程式碼繫結
資料如同上面那樣設定,使用C#程式碼來進行繫結就會看起來比較麻煩一點,
不過在程式中難免會需要用到,程式如下
Binding binder = new Binding()
{
Path = new PropertyPath("Member"),
Mode = BindingMode.OneWay,
Source = data
};
textblock.SetBinding(TextBox.TextProperty, binder);
會特別需要用到一個Binder的類別,
textblock在連過來時,使用SetBinding方法,
如果想要改成聯繫別的屬性,可以打TextBox按一下".",Visual Studio就會列出所有屬性,
同理,其他控制項也有效