'How to render the changes in view from view model in Xamarin forms

I tried several things like adding

Device.BeginInvokeOnMainThread(async () =>
           {
               Title = TableCategory.name;
           });

but didn't work. my viewmodel looks like this

 private string _title;
        public string Title
        {
            get
            {
                return _title;
            }
            set
            {
                if (_title != value)
                {
                    _title = value;
                    OnPropertyChanged(nameof(Title));
                }
            }
        }

every time I select data from my collectionView below function will set data to Title and what I want is to rendered the data present in Title directly to View.

 async Task TableSelected(object obj)
        {
            TableCategory = (TableCategory)obj;
            Device.BeginInvokeOnMainThread(async () =>
            {
                Title = TableCategory.name;
                await App.Current.MainPage.DisplayAlert("Success", $"{Title}", "Ok");
            });
            await PopupNavigation.Instance.PopAsync();

        }

My XAML code looks like this:

                       Text="{Binding Title,Mode=TwoWay}"
                       HeightRequest="20"
                           VerticalOptions="Center"
                           TextColor="#FF464859" FontSize="Small">

What can I try next?



Solution 1:[1]

Based on the details you provided in your question, I don't see any issues. Check that TableCategory.name and Title in the TableSelected method are different

It seems likely that the values for TableCategory.name/value and Title/_title would be the same after TableSelected, so the UI won't be different.

if (_title != value)
{
     _title = value;
     OnPropertyChanged(nameof(Title));
}

Please debug the above if (_title != value) condition in your code. Provide a minimal reproducible code sample if the issue still persists.

Solution 2:[2]

Does it work if you replace Title = TableCategory.name; with Title = "HardcodedName";?

If that works, then something is wrong with TableCategory.name.

If that does not work, then remove await PopupNavigation.Instance.PopAsync();.


Important: any code inside of BeginInvokeOnMainThread gets executed AFTER method TableSelected returns.

What is PopAsync supposed to be removing?

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Rajarajan
Solution 2 ToolmakerSteve