У меня есть проблема, которая занимала часы за часами моего времени.Я уверен, что мне не хватает чего-то очевидного.Я воспроизвел проблему в упрощенной форме, которая использует только 1 кнопку и 1 ярлык.Метка правильно устанавливает начальное значение.После нажатия кнопки я пытаюсь изменить текст метки.От Дэвида до Терри.
Командная кнопка срабатывает, вызывается установщик, вызывается 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".Который показывает, что привязка близка к работе.
Помощь оценена.