我输入到TextBox中的数据未分配给UWP应用程序中的value变量

问题描述 投票:0回答:1

我正在使用模板10开发一个简单的UWP应用。我想在TextBox中输入货币数据。据我了解,我应该在视图模型中使用字符串变量。因此,目前,我只是确保在运行应用程序时输入的数据确实有效。但事实并非如此。在运行或调试它时,如果输入“ 10”(不带双引号),则变量value的赋值为“ 0”。这对我来说没有意义。这是XAML:

<TextBox
    x:Name="HourlyTextBox"
    Style="{StaticResource CommonTextboxStyle}"
    Text="{x:Bind ViewModel.Hourly, Mode=TwoWay}" />

这是视图模型中的代码:

private string hourly;
public string Hourly
{
    get => hourly;
    set
    {
         _ = Set(ref hourly, value);
    }
}

这里是隐藏代码:

using Windows.UI.Xaml.Controls;
using SalaryConv;

namespace SalaryConversion.Views
{
    public sealed partial class MainPage : Page
    {
        private SalaryUnitsEnum lastHadFocus;

        public MainPage()
        {
            InitializeComponent();
            NavigationCacheMode = 
Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;
        }


        #region GettingFocus events

        private void HourlyTextBox_GettingFocus(Windows.UI.Xaml.UIElement sender, Windows.UI.Xaml.Input.GettingFocusEventArgs args)
        {
            if (lastHadFocus == SalaryUnitsEnum.Hourly)
            {
                return;
            }

            lastHadFocus = SalaryUnitsEnum.Hourly;

            ClearOtherMonetaryTextboxes(lastHadFocus);
        }

        private void WeeklyTextBox_GettingFocus(Windows.UI.Xaml.UIElement sender, Windows.UI.Xaml.Input.GettingFocusEventArgs args)
        {
            if (lastHadFocus == SalaryUnitsEnum.Weekly)
            {
                return;
            }

            lastHadFocus = SalaryUnitsEnum.Weekly;

            ClearOtherMonetaryTextboxes(lastHadFocus);
        }

        private void BiWeeklyTextBox_GettingFocus(Windows.UI.Xaml.UIElement sender, Windows.UI.Xaml.Input.GettingFocusEventArgs args)
        {
            if (lastHadFocus == SalaryUnitsEnum.BiWeekly)
            {
                return;
            }

            lastHadFocus = SalaryUnitsEnum.BiWeekly;

            ClearOtherMonetaryTextboxes(lastHadFocus);
        }

        private void SemiMonthlyTextBox_GettingFocus(Windows.UI.Xaml.UIElement sender, Windows.UI.Xaml.Input.GettingFocusEventArgs args)
        {
            if (lastHadFocus == SalaryUnitsEnum.SemiMonthly)
            {
                return;
            }

            lastHadFocus = SalaryUnitsEnum.SemiMonthly;

            ClearOtherMonetaryTextboxes(lastHadFocus);
        }

        private void MonthlyTextBox_GettingFocus(Windows.UI.Xaml.UIElement sender, Windows.UI.Xaml.Input.GettingFocusEventArgs args)
        {
            if (lastHadFocus == SalaryUnitsEnum.Monthly)
            {
                return;
            }

            lastHadFocus = SalaryUnitsEnum.Monthly;

            ClearOtherMonetaryTextboxes(lastHadFocus);
        }

        private void AnnuallyTextBox_GettingFocus(Windows.UI.Xaml.UIElement sender, Windows.UI.Xaml.Input.GettingFocusEventArgs args)
        {
            if (lastHadFocus == SalaryUnitsEnum.Annually)
            {
                return;
            }

            lastHadFocus = SalaryUnitsEnum.Annually;

            ClearOtherMonetaryTextboxes(lastHadFocus);
        }

        #endregion

        #region ClearOtherMonetaryTextboxes helper method

        private void ClearOtherMonetaryTextboxes(SalaryUnitsEnum lastHadFocus)
        {
            if (lastHadFocus != SalaryUnitsEnum.Hourly)
            {
                HourlyTextBox.Text = "0";
            }

            if (lastHadFocus != SalaryUnitsEnum.Weekly)
            {
                WeeklyTextBox.Text = "0";
            }

            if (lastHadFocus != SalaryUnitsEnum.BiWeekly)
            {
                BiWeeklyTextBox.Text = "0";
            }

            if (lastHadFocus != SalaryUnitsEnum.SemiMonthly)
            {
                SemiMonthlyTextBox.Text = "0";
            }

            if (lastHadFocus != SalaryUnitsEnum.Monthly)
            {
                MonthlyTextBox.Text = "0";
            }

            if (lastHadFocus != SalaryUnitsEnum.Annually)
            {
                AnnuallyTextBox.Text = "0";
            }
        }

        #endregion
    }
}
c# uwp template10
1个回答
0
投票

[感谢Richard Zhang提出的查看我的代码的建议,我发现在那里我以前编写了一些代码来处理屏幕上的控件。正是此代码将值重置为0(间接)。我之前写过该代码,所以我全都忘了。

谢谢你,理查德,提出这个建议。它帮助我看到了自己所做的事情,并在对其进行了回顾之后能够轻松地解决它。

© www.soinside.com 2019 - 2024. All rights reserved.