2016-06-30 66 views
1

我正在添加,因爲我不明白一些關於綁定不更新..Xamarin形式 - 標籤,顏色等屬性時,他們的綁定屬性設置

我在C#代碼這個屬性:

public string MyText { get; set; } 

,然後在XAML部分:

<Label Text="{Binding MyText}"/> 

它工作的第一次,但如果我改變MyText字符串,則<Label/>母鹿sn't更新..

我也看到一些關於它的帖子,在那裏人們談論INotifyChange或類似的東西,這個綁定是如何工作的?爲什麼更新不是恆定的,爲什麼總是不一樣?

問題是我的projet有點複雜。我有一個customCalendar我自己做的這是一個網格「自己綁定」DayCase[6][7]Windows日曆,顯示是一樣的。

所以我的問題是雙倍,我需要1個功能的屬性,以「」,如果其中之一改變?因爲在這個例子中,我只是談論一個標籤,但我有DayCase 1個標籤,3個顏色更新,一個月/年的標題更新等等等

我真的失去了誠實,我敢肯定知道如何去思考,如何去做..

感謝您的幫助!

回答

1

使綁定工作。您的視圖模型需要實現INotifyPropertyChanged,它有一個處理程序public event PropertyChangedEventHandler PropertyChanged,具有鉤子Xamarin.Forms'綁定系統啓動,併爲它創建一個調用:

protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) 
     { 
      var eventHandler = PropertyChanged; 
      eventHandler?.Invoke(this, e); 
     } 

之後,寫像被綁定你的財產這樣的:

private string _myText; 
    public string MyText 
    { 
     get { return _myText; } 
     set 
     { 
      if (_myText != value) 
      { 
       _myText = value; 
       OnPropertyChanged(new PropertyChangedEventArgs(nameof(MyText))); 
      } 
     } 
    } 

有關詳情,請閱讀https://developer.xamarin.com/guides/xamarin-forms/xaml/xaml-basics/data_bindings_to_mvvm/

此外,還有其他MVVM框架(MvvmCross,MVVM光等)或Xamarin.Forms.Lab已經爲你做了一些工作。

爲了您customCalendar問題,因爲讓綁定工作是調用PropertyChanged事件,你可以寫一個方法來處理這個喜歡

public void UpdateDayCase(int i, int j, DayCase) 
{ 
    this.DayCases[i][j] = DayCase; 
    OnPropertyChanged(new PropertyChangedEventArgs(nameof(DayCases))); 
} 
+0

哇,你的答案是恰到好處!一切都很好,對不起,我沒有看到你的編輯,這很有趣,但我已經自己做了一些東西:)謝謝反正;)然而,這有點無聊,但它的工作原理,這是主要目標;) – Emixam23