程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Windows 8風格應用開發入門 二十五 數據綁定

Windows 8風格應用開發入門 二十五 數據綁定

編輯:關於.NET

數據綁定是一種簡單方式來顯示數據,UI元素與數據對象之間的連接或綁定是允許數據在兩者之間 流動的。另外建立了綁定且數據發生變化時,相應的UI元素會自動顯示變化。

如何將UI元素與 數據進行綁定

從上面圖可以知道,每個綁定必須指定一個源和一個目標。

其中源對象可以是任何CLR對象,包括目標元素自身和其他UI元素。目標可以是 FrameworkElement的任何DependencyProperty(依賴屬性)。

數據綁定引擎從Binding對象獲取 以下內容:

1)源對象和目標對象;

2)數據流的方向;

3)值轉換器;

例如:使用C#代碼和XAML將TextBox的Foreground屬性進行綁定。

XAML代碼:

<TextBoxx:Name="MyTextBox"Text="Text"Foreground="{Binding Brush1, 

Mode=OneWay}"/>

C#代碼:

MyColors textcolor = new MyColors

();
textcolor.Brush1 = new SolidColorBrush

(Colors.Red);
MyTextBox.DataContext = textcolor;

綁定是使用 {Binding…}語法在XAML中創建的。源是通過設置TextBox的DataContent屬性在代碼中設置的。

另外數據是會被繼承的。若我們在某個父元素上設置數據上下文,那麼其子元素將使用同一數據。我們 可以通過設置Binding.Path屬性綁定到源對象的某個屬性。

數據綁定的方向

每一個綁 定都包含一個Mode屬性,用於確定數據流動的方式和時間。

三種類型的綁定:

1) OneTime:綁定會在創建時使用源數據更新目標。

2)OneWay:綁定會在創建時以及數據發生更 改時使用源數據更新目標(默認模式)。

3)TwoWay:綁定會在目標和源中的任一個發生更改時 同時更新目標和源。

數據更改通知

當源數據對象進行了更改,如何將新的源數據對象 傳遞給目標對象呢?解決辦法是源數據對象繼承INotifyPropertyChanged 接口。因為 INotifyPropertyChanged 接口提供了PropertyChanged 事件,該事件會告訴數據綁定引擎,源對象已 經改變,方便更改目標值。

例如:

// Create a class that implements 

INotifyPropertyChanged.   
       
public class MyColors : INotifyPropertyChanged   
       
{   
       
    private SolidColorBrush _Brush1;   

    // Declare the PropertyChanged event.   
       
    public event PropertyChangedEventHandler PropertyChanged;   

    // Create the property that will be the source of the binding.   
       
    public SolidColorBrush Brush1   
       
    {   
       
        get { return _Brush1; }   
       
        set
       
        {   
       
            _Brush1 = value;   
       
            // Call NotifyPropertyChanged when the source property    
       
            // is updated.   
       
            NotifyPropertyChanged("Brush1");   
       
        }   
       
    }   

    // NotifyPropertyChanged will raise the PropertyChanged event,    
       
    // passing the source property that is being updated.   
       
    public void NotifyPropertyChanged(string propertyName)   
       
    {   
       
        if (PropertyChanged != null)   
       
        {   
       
            PropertyChanged(this,    
       
                new PropertyChangedEventArgs(propertyName));   
       
        }   
       
    }   
       
}

示例代碼中MyColors類繼承了INotifyPropertyChanged 接口,當Brush1屬性更改時將觸發 PropertyChanged事件通知目標對象以及更改。

數據轉換

當我們存儲的數據在UI界面顯 示的時候,對用戶來講不友好時,可以將數據進行相應的轉換進行顯示。這時我們就需要一個數據的轉 換器了。

我們可以在任意的綁定上設置轉換器,並且自定義轉換器類必須繼承實現 IValueConverter 接口。

例如:

// Custom class implements the IValueConverter 

interface.   
       
public class DateToStringConverter : IValueConverter   
       
{   

    #region IValueConverter Members   

    // Define the Convert method to change a DateTime object to    
       
    // a month string.   
       
    public object Convert(object value, Type targetType,    
       
        object parameter, string language)   
       
    {   
       
        // value is the data from the source object.   
       
        DateTime thisdate = (DateTime)value;   
       
        int monthnum = thisdate.Month;   
       
        string month;   
       
        switch (monthnum)   
       
        {   
       
            case 1:   
       
                month = "January";   
       
                break;   
       
            case 2:   
       
                month = "February";   
       
                break;   
       
            default:   
       
                month = "Month not found";   
       
                break;   
       
        }   
       
        // Return the value to pass to the target.   
       
        return month;   

    }   

    // ConvertBack is not implemented for a OneWay binding.   
       
    public object ConvertBack(object value, Type targetType,    
       
        object parameter, string language)   
       
    {   
       
        throw new NotImplementedException();   
       
    }   

    #endregion   
       
}

當從源對象傳遞數據時,綁定引擎會調用Convert 並將返回的數據傳遞回目標。

當 從目標傳遞數據時,綁定引擎會調用ConvertBack 並將返回的數據傳遞回源。

XAML代碼中設置 Converter:

<UserControl.Resources>   
       
  <local:DateToStringConverter x:Key="Converter1"/>   
       
</UserControl.Resources>   

...   

<TextBlock Grid.Column="0"
       
  Text="{Binding Month, Converter={StaticResource Converter1}}"/>

轉換器中還有 兩個可選參數:ConverterLanguage(該參數允許指定在轉換中使用的語言)和 ConverterParameter( 該參數允許為轉換邏輯傳遞一個參數)。

注意:若在數據轉換中存在錯誤,最好不要拋出異常 ,而是返回DependencyProperty.UnsetValue,它將停止數據傳輸。

支持的綁定方案

注:該表格根據MSDN提供的文檔進行相應的整理。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved