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)));
}
我来了,因为我对绑定有些不了解..
我在 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)));
}