绑定更改时,XAML视图未更新

时间:2019-10-09 11:05:33

标签: xamarin mvvm xamarin.forms

我有一个绑定到ViewModel的XAML视图

在加载视图时,它将绑定上下文设置为对象(类型为GAME_TBL)

加载ViewModel时,我等待一条带有唯一ID的消息

然后我用它来调用一个API并返回一个我铸造的游戏对象以替换绑定的对象

但是,即使调试也可以告诉我这一切正常,并且PropertyChanged会触发,UI永远不会更新

从视图中:

<ContentPage.BindingContext>

    <viewmodels:VotingViewModel/>

</ContentPage.BindingContext>

.....

<Label Text="{Binding currentGame.GAME_NAME}" />

在VotingViewModel中:

public class VotingViewModel : BaseViewModel

{

    GAME_TBL gameSelected;

    public GAME_TBL currentGame
    {
        get {

            return _currentGame;


        }


        set
        {
            _currentGame = value;
            OnPropertyChanged(nameof(_currentGame));
        }
    }

    public VotingViewModel()
    {
        MessagingCenter.Subscribe<Views.GamesView, string>(this, "Selected Game", (sender, arg) =>

        {
            gameID = Convert.ToInt32(arg);

            currentGame = loadGameInfo(); // this interacts with an API to set object specifics

        });

    }

}

在BaseViewModel中

    protected virtual void OnPropertyChanged(
    string propertyName = null)
    {
        System.Diagnostics.Debug.WriteLine("Debug: Name of property: " + propertyName);

        PropertyChanged?.Invoke(this,
        new PropertyChangedEventArgs(propertyName));


    }

1 个答案:

答案 0 :(得分:0)

您需要在GAME_TBL的模型类中继承BaseViewModel。 在类GAME_TBL中,您需要以以下方式指定每个属性:-

    private string _gAME_NAME;
    public string GAME_NAME
    {
        get => _gAME_NAME;
        set
        {
            _gAME_NAME = value;
            OnPropertyChanged(nameof(GAME_NAME));
        }
    }

每个属性都应具有内部支持属性。如上。 祝您编码愉快!