首页 > 解决方案 > 如何将我的 Entry 值绑定到我的 ViewModel.cs?

问题描述

嘿,我对 Xamarin 很陌生,我想从一个简单的方法开始,它有 3 个条目,该方法将在计算 3 个输入数字的平均值的函数“CalculateAv(Entry1,Entry2,Entry3)”中读取。不知何故,参数中的条目是未定义的,可能 bc 绑定没有很好地工作。这里有一些代码: BasicButtonCommandPage.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:ButtonDemos;assembly=ButtonDemos"
             x:Class="ButtonDemos.BasicButtonCommandPage"
             Title="Basic Button Command">

    <ContentPage.BindingContext>
        <local:CommandDemoViewModel />
    </ContentPage.BindingContext>

    <ContentPage.Resources>
        <ResourceDictionary>
            <local:CommandDemoViewModel x:Key="model" />
            <local:DoubleToStringConverter x:Key="stringConverter" />
            <local:DoubleRoundingConverter x:Key="roundConverter" />
        </ResourceDictionary>
    </ContentPage.Resources>


    <StackLayout>
        <Label x:Name="Ausgabe" 
               Text="{Binding Number, StringFormat='Value is now {0}'}"
               FontSize="Large"
               VerticalOptions="CenterAndExpand" 
               HorizontalOptions="Center" />


        <Entry x:Name="Number1"
                Placeholder="Number1"
                Keyboard="Numeric"
                BindingContext="{x:Reference Rechner}" 
                Text="{Binding Path=CommanDemoViewModelProperty[modal].ErsteNummer}" />

        <Entry x:Name="Number2"
                Placeholder="Number2"
                Keyboard="Numeric"
                BindingContext="{x:Reference Rechner}"
                Text="{Binding Path=CommanDemoViewModelProperty[modal].ZweiteNummer}" />

        <Entry x:Name="Number3"
                Placeholder="Number3"
                Keyboard="Numeric"
                BindingContext="{x:Reference Rechner}"
                Text="{Binding Path=CommanDemoViewModelProperty[modal].DritteNummer}" />

        <Button x:Name="Rechner"
                Text="Multiply by 2"
                VerticalOptions="CenterAndExpand"
                HorizontalOptions="Center"
                Command="{Binding MultiplyBy2Command}" />
                <!--CommandParameter="{Binding Number1, Number2, Number3}" />-->


        <Button Text="Divide by 2"
                VerticalOptions="CenterAndExpand"
                HorizontalOptions="Center"
                Command="{Binding DivideBy2Command}" />
    </StackLayout>

</ContentPage>

这里是 CommanDemoViewModel.cs

namespace ButtonDemos
{   

    class CommandDemoViewModel : INotifyPropertyChanged
    {

        double number = 2;
        double ersteNummer, zweiteNummer, dritteNummer;

        BindableProperty.Create()
        public event PropertyChangedEventHandler PropertyChanged;

        public double ErsteNummer
        {
            set
            {
                if (ersteNummer != value)
                {
                    ersteNummer = value;
                    OnPropertyChanged("ErsteNummer");
                }
            }
            get
            {
                return ersteNummer;
            }
        }
        public double ZweiteNummer
        {
            set
            {
                if (zweiteNummer != value)
                {
                    zweiteNummer = value;
                    OnPropertyChanged("ZweiteNummer");
                }
            }
            get
            {
                return zweiteNummer;
            }
        }
        public double DritteNummer
        {
            set
            {
                if (dritteNummer != value)
                {
                    dritteNummer = value;
                    OnPropertyChanged("DritteNummer");
                }
            }
            get
            {
                return dritteNummer;
            }
        }
        public double Number
        {
            set
            {
                if (number != value)
                {
                    number = value;
                    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Number"));
                }
            }
            get
            {
                return number;
            }
        }

        protected void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        void CalculateAv(double ersteNummer, double zweiteNummer, double dritteNummer)
        {
            List<double> grades = new List<double> { ersteNummer, zweiteNummer, dritteNummer };
            Number = grades.Average();
        }
        public CommandDemoViewModel()
        {


            MultiplyBy2Command = new Command(

       execute: () => CalculateAv(ersteNummer, zweiteNummer, dritteNummer));




        DivideBy2Command = new Command(() => Number /= 2);  
        }

        public ICommand MultiplyBy2Command { private set; get; }

        public List<int> grades { get; set; }
        public ICommand DivideBy2Command { private set; get; }
        public string Path { get; set; }
    }
}

请不要对按钮的名称感到恼火,因为它是来自 xamarin.forms 的示例。谢谢大家!

标签: c#xamarinxamarin.forms

解决方案


您的条目绑定不正确。

Number1 应如下所示

Text="{Binding ErsteNummer, Mode=TwoWay}" />

推荐阅读