Xamarin Forms - 标签、颜色和其他属性在设置绑定属性时不会更新

Xamarin Forms - Label, Color and other attribute doesn't update when their Binded attributes are set

我来了,因为我对绑定有些不了解..

我在 C# 代码中有这个属性:

public string MyText { get; set; }

然后在XAML部分:

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

第一次有效,但如果我更改 MyText 字符串,则 <Label/> 不会更新..

我也看到一些关于它的 post ,人们谈论 INotifyChange 或类似的东西,这个绑定是如何工作的?为什么更新不是恒定的,为什么它总是不一样?

问题是我的项目有点复杂。我有一个自己制作的 customCalendar,它是 Grid "bind by myself again" 到 DayCase[6][7] 例如 Windows日历,显示同上

所以我的问题是双重的,如果其中一个发生变化,我是否需要 1 个属性函数来“listen”?因为在这个例子中,我只说了一个标签,但我有 1 个 DayCase 标签、3 个要更新的颜色、一个要更新 Month/Year 的标题,等等

老实说我真的输了,我一定知道怎么想,怎么做..

感谢您的帮助!

使绑定生效。您的 ViewModel 需要实现 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 Light 等)或 Xamarin.Forms。Lab 已经为您做了一些工作。

对于你的 customCalendar 问题,因为让绑定工作是调用 PropertyChanged 事件,你可以编写一个方法来处理这个问题

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