Binding properties of a class in ContentView

Xamarin NewBie 121 Reputation points
2021-04-05T05:37:23.943+00:00

I'm trying to achieve what I think is probably quite simple but as I'm new to Xamarin & Databinding I think I'm getting in a spin.
I have a very simple ContentPage that just has a Databinding to my viewModel for this page and my ContentView, TotalsTemplate.

<ContentPage.BindingContext>
    <vm:DealsTodayViewModel />
</ContentPage.BindingContext>
<ContentPage.Content>
    <StackLayout>
        <template:TotalsTemplate></template:TotalsTemplate>
    </StackLayout>
</ContentPage.Content>

My viewmodel has a public property of my class, Totals, which has basic int,string,decimal props.

    public class DealsTodayViewModel
    {
        Public string ViewModelPeriod;
        public PeriodTotals Totals;
        public DealsTodayViewModel()
        {
            ViewModelPeriod = "TODAY";
            Totals = new PeriodTotals
            {
                Period = "DAILY",
                ClientServices_Deals_Chicago = 1,
                ClientServices_Deals_Manchester_Na = 1,
                ClientServices_Deals_Manchester_Uk = 1,
                ClientServices_Ramp_Chicago = 1.2m,
                ClientServices_Ramp_Manchester_Na = 1.3m,
                ClientServices_Ramp_Manchester_Uk = 1.4m
        };
    }
}

Now in my TotalsTemplte ContentView I have a Grid with following inside.

    <Label Text="{***Binding ViewModelPeriod***}" FontAttributes="Bold"/>
    <Frame OutlineColor="Black" Grid.Row="0" Grid.Column="1">
        <Label Text="{Binding ***Totals.Period***}" FontAttributes="Bold"/>
    </Frame>

My String property on the DealsTodayViewModel is visible in my ContentView but not the Perod property from inside my Totals property, am I binding incorrectly to this?

Xamarin
Xamarin
A Microsoft open-source app platform for building Android and iOS apps with .NET and C#.
5,291 questions
0 comments No comments
{count} votes

Accepted answer
  1. JarvanZhang 23,936 Reputation points
    2021-04-06T02:03:45.863+00:00

    Hello,​

    Welcome to our Microsoft Q&A platform!

    According to the above code, it seems that you didn't encapsulate the related properties in the 'DealsTodayViewModel' class. Please add the get and set methods for the properties as below. Please make sure the properties of the PeriodTotals class are also encapsulated.

       public class DealsTodayViewModel  
       {  
           public string ViewModelPeriod { get; set; }  
           public PeriodTotals Totals { get; set; }  
           public DealsTodayViewModel()  
           {  
               ...  
           }  
       }  
         
       public class PeriodTotals  
       {  
           public string Period { get; set; }  
           ...  
       }  
    

    Best Regards,

    Jarvan Zhang


    If the response is helpful, please click "Accept Answer" and upvote it.

    Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.

    0 comments No comments

0 additional answers

Sort by: Most helpful