Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.2k views
in Technique[技术] by (71.8m points)

xaml - Databind properties of a class in ContentView

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?

question from:https://stackoverflow.com/questions/65858248/databind-properties-of-a-class-in-contentview

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

From the document, data-binding should binding between properties instead of field:

Data binding is the technique of linking properties of two objects so that changes in one property are automatically reflected in the other property. Data binding is an integral part of the Model-View-ViewModel (MVVM) application architecture.

So the solution is change the fields in your vm to properties:

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

Refer: field and property


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...