我有一个绑定到类属性
的文本框 <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”?
答案 0 :(得分:2)
我的意思是看起来好像你将文字设置为30然后从你的来源获得价值,这不是30。
为什么不将源值设为30?
编辑 - 根据源文件的位置,它将只是
sourcevalue = textbox.text
如果你告诉我更多关于你的来源的话,我可以提供更好的答案。
答案 1 :(得分:0)
您可以通过几种方法设置默认值:
以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";
}