XAML与x引用绑定不起作用,但与代码绑定相同-为什么?

wbgh16ku  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(122)

我有一个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"

xiozqbni

xiozqbni1#

BindableProperty可以检测属性的变化。所以你可以在BindableProperty.Create方法中注册一个属性变化的回调方法。这个方法会检测ShowCurrentIntervalInfoProperty的值变化。然后你可以在其中添加一些逻辑(例如为label 2设置值)。请考虑我下面的代码,

public static readonly BindableProperty ShowCurrentIntervalInfoProperty = BindableProperty.Create(nameof(ShowCurrentIntervalInfo), typeof(bool), typeof(WorkoutTimerBottomView), defaultBindingMode: BindingMode.TwoWay,propertyChanged:OnInfoPropertyChanged);

private static void OnInfoPropertyChanged(BindableObject bindable, object oldValue, object newValue)
{
    var obj = bindable as WorkoutTimerBottomView;
    obj.label2.Text = newValue.ToString();
}

字符串
这样就不用在代码后面使用OnPropertyChanged方法了。
希望有帮助!

相关问题