數(shù)據(jù)綁定

概念

數(shù)據(jù)綁定連接兩個(gè)對(duì)象臂外,稱為源和目標(biāo)伴澄。源對(duì)象提供數(shù)據(jù)。目標(biāo)對(duì)象將消耗(并經(jīng)常顯示)來(lái)自源對(duì)象的數(shù)據(jù)账劲。例如戳护,Label(目標(biāo)對(duì)象)通常將其Text屬性綁定到源對(duì)象中的公共字符串屬性。下圖說(shuō)明了綁定關(guān)系:

1

數(shù)據(jù)綁定的主要好處是您不再需要擔(dān)心在視圖和數(shù)據(jù)源之間同步數(shù)據(jù)瀑焦。源對(duì)象中的更改被綁定框架自動(dòng)推送到目標(biāo)對(duì)象的幕后腌且,目標(biāo)對(duì)象中的更改可以選擇性地推回到源對(duì)象

建立數(shù)據(jù)綁定是一個(gè)兩步過(guò)程

目標(biāo)對(duì)象的BindingContext屬性必須設(shè)置為源
目標(biāo)和來(lái)源之間必須建立約束。在XAML中榛瓮,這是通過(guò)使用綁定標(biāo)記擴(kuò)展來(lái)實(shí)現(xiàn)的铺董。在C#中,這是通過(guò)SetBinding方法實(shí)現(xiàn)的
有關(guān)數(shù)據(jù)綁定的更多信息榆芦,請(qǐng)參閱https://developer.xamarin.com/guides/xamarin-forms/xaml/xaml-basics/data_binding_basics/

綁定方式

1.XAML
2.C#

XAML

前端Binding

<StackLayout Padding="0,20,0,0">
    <Label Text="Forename:" />
    <Entry Text="{Binding Forename, Mode=TwoWay}" />
    <Label Text="Surname:" />
    <Entry Text="{Binding Surname, Mode=TwoWay}" />
    <StackLayout Padding="0,20,0,0" Orientation="Horizontal">
        <Label Text="Your forename is:" />
        <Label Text="{Binding Forename}" />
    </StackLayout>
    <StackLayout Orientation="Horizontal">
        <Label Text="Your surname is:" />
        <Label Text="{Binding Surname}" />
    </StackLayout>
</StackLayout>

后臺(tái)BindingContext賦值

BindingContext = new DetailsViewModel();

DetailsViewModel類

public class DetailsViewModel : INotifyPropertyChanged
{
    string forename, surname;

    public string Forename
    {
        get
        {
            return forename;
        }
        set
        {
            if (forename != value)
            {
                forename = value;
                OnPropertyChanged("Forename");
            }
        }
    }

    public string Surname
    {
        get
        {
            return surname;
        }
        set
        {
            if (surname != value)
            {
                surname = value;
                OnPropertyChanged("Surname");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        var changed = PropertyChanged;
        if (changed != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

示例代碼

https://github.com/zLulus/NotePractice/tree/dev3/Xamarin.Forms/XamarinDemo/XamarinDemo/XamarinDemo/Bindings 的BindingFirstName2

使用內(nèi)置模板TextCell進(jìn)行數(shù)據(jù)綁定(C#)

進(jìn)行數(shù)據(jù)綁定

//Model
Employee employeeToDisplay = new Employee();

//輸入框
var firstNameEntry = new Entry()
{
    HorizontalOptions = LayoutOptions.FillAndExpand
};
//綁定  下面兩個(gè)綁定柄粹,任選其一即可   
this.BindingContext = employeeToDisplay;
firstNameEntry.SetBinding(Entry.TextProperty, "FirstName");

Employee類
實(shí)現(xiàn)接口INotifyPropertyChanged喘鸟,F(xiàn)irstName在set時(shí),觸發(fā)OnPropertyChanged方法

public class Employee : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    string _firstName;
    public string FirstName
    {
        get { return _firstName; }
        set
        {
            if (value.Equals(_firstName, StringComparison.Ordinal))
            {
                // Nothing to do - the value hasn't changed;
                return;
            }
            _firstName = value;
            OnPropertyChanged();

        }
    }

    void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        var handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

查看綁定結(jié)果

//查詢按鈕
Button getValueButton = new Button();
getValueButton.Text = "查看結(jié)果";
getValueButton.Clicked += (async (sender, e) =>
{
    await DisplayAlert("綁定結(jié)果",$"當(dāng)前Entry的Text是{firstNameEntry.Text},后臺(tái)實(shí)體的FirstName是{employeeToDisplay.FirstName}","確定");
});

示例代碼

https://github.com/zLulus/NotePractice/tree/dev3/Xamarin.Forms/XamarinDemo/XamarinDemo/XamarinDemo/Bindings 的BindingFirstName

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末驻右,一起剝皮案震驚了整個(gè)濱河市什黑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌堪夭,老刑警劉巖愕把,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異森爽,居然都是意外死亡恨豁,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門爬迟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)橘蜜,“玉大人,你說(shuō)我怎么就攤上這事付呕〖聘#” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵徽职,是天一觀的道長(zhǎng)象颖。 經(jīng)常有香客問(wèn)我,道長(zhǎng)姆钉,這世上最難降的妖魔是什么说订? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮潮瓶,結(jié)果婚禮上陶冷,老公的妹妹穿的比我還像新娘。我一直安慰自己筋讨,他們只是感情好埃叭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布摸恍。 她就那樣靜靜地躺著悉罕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪立镶。 梳的紋絲不亂的頭發(fā)上壁袄,一...
    開(kāi)封第一講書(shū)人閱讀 51,488評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音媚媒,去河邊找鬼嗜逻。 笑死,一個(gè)胖子當(dāng)著我的面吹牛缭召,可吹牛的內(nèi)容都是我干的栈顷。 我是一名探鬼主播逆日,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼萄凤!你這毒婦竟也來(lái)了室抽?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤靡努,失蹤者是張志新(化名)和其女友劉穎坪圾,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體惑朦,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兽泄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了漾月。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片病梢。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖梁肿,靈堂內(nèi)的尸體忽然破棺而出飘千,到底是詐尸還是另有隱情,我是刑警寧澤栈雳,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布护奈,位于F島的核電站,受9級(jí)特大地震影響哥纫,放射性物質(zhì)發(fā)生泄漏霉旗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一蛀骇、第九天 我趴在偏房一處隱蔽的房頂上張望厌秒。 院中可真熱鬧,春花似錦擅憔、人聲如沸鸵闪。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蚌讼。三九已至,卻和暖如春个榕,著一層夾襖步出監(jiān)牢的瞬間篡石,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工西采, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凰萨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像胖眷,于是被迫代替她去往敵國(guó)和親武通。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容