第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

文本框自動(dòng)分配默認(rèn)值 wpf

文本框自動(dòng)分配默認(rèn)值 wpf

C#
浮云間 2022-06-19 16:22:15
我開始通過(guò)練習(xí)一個(gè)簡(jiǎn)單的加法程序來(lái)學(xué)習(xí)使用 mvvm 的 wpf。我的應(yīng)用程序運(yùn)行良好。但是在運(yùn)行應(yīng)用程序時(shí),文本框會(huì)自動(dòng)分配默認(rèn)值 0。在用戶提供任何輸入之前,我不希望 0 。視圖.xaml: <TextBox Height="28" Margin="112,56,46,0"  Text ="{Binding firstargument}"   Name="textBox1" VerticalAlignment="Top" />視圖模型.cs  private string _number1;        public string firstargument        {            get { return _number1; }            set            {                this._number1 = value;                this.OnPropertyChanged("firstargument");            }        }我的問(wèn)題是執(zhí)行后刪除文本框中的值 0 嗎?編輯:模型視圖.cs class ViewModel : INotifyPropertyChanged    {        public RelayCommand AddNew { get; set; }        private int _number1;        public int firstargument        {            get { return _number1; }            set            {                this._number1 = value;                this.OnPropertyChanged("firstargument");            }        }        private int _number2;        public int secondargument        {            get { return _number2; }            set            {                this._number2 = value;                this.OnPropertyChanged("secondargument");            }        }        private int _number3;        public int _addedargument        {            get { return _number3; }            set            {                _number3 = value;                this.OnPropertyChanged("_addedargument");            }        }    public  ViewModel()    {        AddNew = new RelayCommand(o => AddNumbers());    }    private void AddNumbers()    {//Model instance is created here.        Number p = new Number() { number1 = this._number1, number2 = this._number2 };        var c = p.number1 + p.number2;        _addedargument = c;    }    #region INotifyPropertyChanged Members    public event PropertyChangedEventHandler PropertyChanged;    private void OnPropertyChanged(string propertyName)    {        if (PropertyChanged != null)        {            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));        }    }    #endregion    }
查看完整描述

3 回答

?
拉風(fēng)的咖菲貓

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊

我將模型的 int 屬性包裝在一個(gè)字符串屬性中,因?yàn)?TextBox.Text 是一個(gè)字符串,其他任何東西都會(huì)產(chǎn)生轉(zhuǎn)換錯(cuò)誤。


ViewModel 需要自己的字符串,而不是總是將用戶的輸入轉(zhuǎn)換為 int,因?yàn)橛脩艨赡軙?huì)清除該框,或者在鍵入“-1”的過(guò)程中部分輸入了一個(gè)不是有效數(shù)字的值。當(dāng)您收到轉(zhuǎn)換錯(cuò)誤時(shí),WPF 綁定無(wú)法更新視圖模型,因此您不知道有問(wèn)題。


    private string firstArgument;


    public string FirstArgument

    {

        get

        {

            return this.firstArgument;

        }


        set

        {

            this.firstArgument= value;


            int tempInt;

            if (int.TryParse(value, out tempInt))

            {

                this.Model.FirstArgument = tempInt;

            }


            this.NotifyPropertyChanged();

        }

    }

以下是我用來(lái)驗(yàn)證字符串是否為有效 int 的大部分代碼。


    protected void NotifyPropertyChanged([CallerMemberName]string propertyName = null)

    {

        this.CheckForPropertyErrors();


        this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

    }



    public override void CheckForPropertyErrors()

    {

        this.ValidateInt(this.FirstArgument , nameof(this.FirstArgument ));

    }



    protected void ValidateInt32(string value, string fieldName, string displayName = null)

    {

        int temp;

        if (!int.TryParse(value, out temp))

        {

            this.AddError(new ValidationError(fieldName, Constraints.NotInt32, $"{displayName ?? fieldName} must be an integer"));

        }

        else

        {

            this.RemoveError(fieldName, Constraints.NotInt32);

        }

    }


查看完整回答
反對(duì) 回復(fù) 2022-06-19
?
HUWWW

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊

int變量的默認(rèn)值為0。我想,這會(huì)幫助你


 private int? _number1;

    public int? firstargument

    {

        get { return _number1; }

        set

        {

            this._number1 = value;

            this.OnPropertyChanged("firstargument");

        }

    }


查看完整回答
反對(duì) 回復(fù) 2022-06-19
?
江戶川亂折騰

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊

原因

您在運(yùn)行窗口中獲得 a 的原因0是您的綁定屬性都是int并且0是 a 的默認(rèn)值int。


0of anint是 XAML 綁定系統(tǒng)的有效值,因此在您鍵入任何內(nèi)容之前,您會(huì)看到所有TextBoxes 都包含 a 。0


解決方案

您的所有屬性都應(yīng)該是 astring并轉(zhuǎn)換您的實(shí)際數(shù)字:


private int? _number1;


public string FirstArgument

{

    get => _number1?.ToString();

    set

    {

        if (int.TryParse(value, out var number))

        {

            _number1 = number;

            OnPropertyChanged("FirstArgument");

        }

        else

        {

            _number1 = null;

        }

    }

}

注意:

  1. 因?yàn)槟赡軙?huì)得到一個(gè)無(wú)法轉(zhuǎn)換為的文本int,所以您可以int?在輸入錯(cuò)誤號(hào)時(shí)使用它來(lái)存儲(chǔ)空值。

  2. 將您的數(shù)字轉(zhuǎn)換為字符串或從字符串轉(zhuǎn)換,以便它可以正確顯示到您的 XAML 綁定系統(tǒng)中。

  3. 該屬性應(yīng)該是字符串,不能是 an,int?因?yàn)?XAML 綁定系統(tǒng)不會(huì)自動(dòng)將 a 轉(zhuǎn)換string為 an int,除非您自己轉(zhuǎn)換或編寫新的IValueConverter.

更新

要實(shí)現(xiàn)該Add命令,只需使用字段而不是屬性。


private void AddNumbers()

{

    var a = _number1?.Value ?? 0;

    var b = _number2?.Value ?? 0;

    var c = a + b;

    _addedargument = c;

}

如果要將結(jié)果存儲(chǔ)到模型中,則存儲(chǔ)a, b,c值。


查看完整回答
反對(duì) 回復(fù) 2022-06-19
  • 3 回答
  • 0 關(guān)注
  • 295 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)