如何更改TextBox.文本不丢失银光装订

本文关键字:何更改 TextBox 文本 | 更新日期: 2023-09-27 17:57:54

我有一个绑定到类属性的文本框

 <TextBox x:Name="TradeTextBox" 
    Text="{Binding Path=Entier,
                   Mode=TwoWay,
                   NotifyOnValidationError=True,
                   ValidatesOnExceptions=True,
                   UpdateSourceTrigger=Explicit}"/>

这是我的财产:

private string _entier;
public string Entier
        {
            get { return _entier; }
            set
            {
                if (!Regex.IsMatch(Entier.Trim(), NumberPattern, RegexOptions.IgnoreCase))
                    throw new ArgumentException("can only have numbers not characters");
                _entier = value;
                OnPropertyChanged("Entier");
            }
        }

正如您所看到的,我正在使用异常验证并通知属性已更改现在,我的问题是:当我试图从主类构造函数初始化textBox.Text时,文本显示为空。。。

我试过这样做,但有些方法不起作用:

 public MyClass()
    {
        TradeTextBox.Text = "30";
        TradeTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource();
    }

你能帮我吗?请弄清楚为什么在我运行应用程序时textBox.text没有设置为"30"?

如何更改TextBox.文本不丢失银光装订

我的意思是,看起来像是将文本设置为30,然后从源代码中获取值,而不是30。

为什么不让你的源价值为30呢?

编辑-取决于你的源文件,它将只是

sourcevalue=textbox.text

如果你告诉我更多关于你的消息来源,我可以提供一个更好的答案。

您有几种方法可以设置默认值:

在xaml(-binding)中声明性地:

<TextBox x:Name="TradeTextBox" 
    Text="{Binding Path=Entier,
                   TargetNullValue='30',
                   Mode=TwoWay,
                   NotifyOnValidationError=True,
                   ValidatesOnExceptions=True,
                   UpdateSourceTrigger=Explicit}"/>

作为Viewmodel属性的默认值:

private string _entier = "30";
public string Entier
    {
        get { return _entier; }
        set
        {
            if (!Regex.IsMatch(Entier.Trim(), NumberPattern, RegexOptions.IgnoreCase))
                throw new ArgumentException("can only have numbers not characters");
            _entier = value;
            OnPropertyChanged("Entier");
        }
    }

最后。。。使用一些代码(不会影响现有的绑定,但我不确定这是否真的有必要):

public MyClass()
{
    InitializeComponent();
}
public void CheckBoxChecked()
{
    SetBinding(TagProperty, new Binding("Text"){Source=TradeTextBox, Mode=TwoWay});
    Tag="30";
}