【问题标题】:Xamarin Forms - Label, Color and other attribute doesn't update when their Binded attributes are setXamarin Forms - 标签、颜色和其他属性在设置绑定属性时不会更新
【发布时间】:2016-11-03 04:45:03
【问题描述】:

我来是因为我不了解绑定的一些内容..

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

public string MyText { get; set; }

然后在 XAML 部分:

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

它第一次工作,但如果我更改MyText 字符串,那么&lt;Label/&gt; 不会更新..

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

问题是我的项目有点复杂。我有一个自己制作的 customCalendar,它是一个 Grid“再次由我自己绑定”到 DayCase[6][7],例如 Windows 日历,显示是一样的。

所以我的问题是双重的,如果其中一个发生变化,我是否需要按属性分配 1 个函数来“listen”?因为在示例中,我只谈论一个标签,但我有 1 个按 DayCase 的标签,3 个颜色要更新,一个带有月/年的标题要更新,等等

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

感谢您的帮助!

【问题讨论】:

    标签: c# xaml binding xamarin.forms updates


    【解决方案1】:

    使绑定工作。您的 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)));
    }
    

    【讨论】:

    • 哇,你的回答太完美了!一切正常,抱歉,我没有看到您的编辑,这很有趣,但我已经自己制作了一些东西:) 无论如何,谢谢 ;) 但是,这种复制有点无聊,但它有效,这是主要目标;)
    猜你喜欢
    • 2018-09-09
    • 1970-01-01
    • 2016-12-30
    • 2019-02-08
    • 2021-12-23
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多