2016-06-30 53 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