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

时间:2019-05-28 21:34:47

标签: xamarin.forms binding viewmodel

我遇到了一个问题,这花费了我数小时的时间。我确信我缺少明显的东西。我以仅使用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();
    }
}

...

这类似于此帖子,没有得到完整的答案。也许由于缺少代码:

Two way binding Not working In Xamarin Forms

太奇怪了,加载时显示了“ David”值。这表明绑定已接近工作。

帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

仅作记录,我发现了问题。由于某种原因,INPC有一个本地的空接口。我猜想在使用重构功能时,我单击了实现接口,而不是添加了“ using”。因此,当INPC没有按照其应有的方式工作时,请检查您使用的是实际的INPC,而不是存根:-)