Xamarin 形成双向绑定,在初始加载后不触发



我有一个问题,花了我几个小时的时间。 我确定我错过了一些明显的东西。 我已经在仅使用 1 个按钮和 1 个标签的简化表单上重现了该问题。 标签正确设置为初始值。 单击按钮后,我正在尝试更改标签文本。 从大卫到特里。

命令按钮正在触发,setter正在被调用,onPropertyChange正在被调用。 有趣的是,在初始调试后,get'er不会再次触发。 (检查了所有明显的东西,属性是公共的,属性,它命名正确,指定 TwoWay(

//--- View Model code ---//
public class TestBindingVM : INotifyPropertyChanged
{
    private string profileName;
    public ICommand ChangeTextCommand { get; }
    public TestBindingVM()
    {
        ProfileName = "David";
        ChangeTextCommand = new Command(UpdateTextCommandAction);
    }
    public void UpdateTextCommandAction()
    {
        ProfileName = "Terry";
    }

    public string ProfileName
    {
        get => profileName;
        set
        {
            profileName = value;
            OnPropertyChanged("ProfileName");
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        var propertyChangedCallback = PropertyChanged;
        propertyChangedCallback?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}
// ---------------------
// Complete XAML Layout :
//----------------------
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="TrackManager.Views.TestBindingPage">
  <ContentPage.Content>
    <StackLayout>
        <Label Text="{Binding Path=ProfileName}"
            VerticalOptions="CenterAndExpand"
            HorizontalOptions="CenterAndExpand" />
        <Button Margin="0,10,0,0" Text="Change Text"
                    Command="{Binding ChangeTextCommand}"
                    TextColor="White"
                    />
    </StackLayout>
  </ContentPage.Content>
</ContentPage>
///----------------------------------------------//
// The page code, creating the bindingcontext    //
///----------------------------------------------//
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class TestBindingPage : ContentPage
{
    public ViewModels.TestBindingVM vm = new ViewModels.TestBindingVM();
    public TestBindingPage ()
    {
        this.BindingContext = vm;
        InitializeComponent();
    }
}

这与这篇文章类似,没有得到完整的答案。 也许是由于缺少代码:

双向绑定 在 Xamarin 窗体中不起作用

加载

时显示值"David"真是太奇怪了。 这表明绑定即将起作用。

感谢帮助。

只是为了记录,我发现了这个问题。 由于某种原因,INPC有一个本地的空接口。 我想在使用重构功能时,我单击了实现接口而不是添加"使用"。 因此,当 INPC 没有做它显然应该做的事情时,请检查您使用的是实际的 INPC 而不是一些存根:-(

相关内容

  • 没有找到相关文章