我有一个ContentView,它公开了一个布尔属性,你可以绑定到它:
public static readonly BindableProperty ShowCurrentIntervalInfoProperty = BindableProperty.Create(nameof(ShowCurrentIntervalInfo), typeof(bool), typeof(WorkoutTimerBottomView), defaultBindingMode: BindingMode.TwoWay);
public bool ShowCurrentIntervalInfo
{
get => (bool)GetValue(ShowCurrentIntervalInfoProperty);
set => SetValue(ShowCurrentIntervalInfoProperty, value);
}
字符串
在此ContentView的XAML中,有一些控件的值绑定到此属性。现在为了演示我的问题,考虑以下两个标签和按钮:
<Label x:Name="label1" Text="{Binding Source={x:Reference workoutTimerBottomView}, Path=ShowCurrentIntervalInfo}"/>
<Label x:Name= "label2"/>
<Button Clicked="Button_Clicked"/>
型
后面的代码:
protected override void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
if (propertyName == nameof(ShowCurrentIntervalInfo))
{
label2.Text = ShowCurrentIntervalInfo.ToString();
}
}
private void Button_Clicked(object sender, EventArgs e)
{
ShowCurrentIntervalInfo = !ShowCurrentIntervalInfo;
}
型
->现在,当我点击按钮时,label 2的文本确实从True切换到False,这要归功于上面显示的OnPropertyChanged的代码,但是label 1的文本仍然绑定到False。
我不确定这是否是一个已知的问题,或者我是否误解了绑定?
(Note:ContentView示例的名称与x:Reference一致,这在ContentView标记中)
x:Name="workoutTimerBottomView"
型
1条答案
按热度按时间xiozqbni1#
BindableProperty可以检测属性的变化。所以你可以在
BindableProperty.Create
方法中注册一个属性变化的回调方法。这个方法会检测ShowCurrentIntervalInfoProperty的值变化。然后你可以在其中添加一些逻辑(例如为label 2设置值)。请考虑我下面的代码,字符串
这样就不用在代码后面使用OnPropertyChanged方法了。
希望有帮助!