2011-09-27 65 views
1

我想在我的Silverlight页面(textboxes,datepickers ...)中的几个控件中添加一些值,但似乎其中一些从未初始化(直到用户手动设置任何值)。Silverlight未初始化控件

我已经尝试了它被页面的代码后面的“Loaded”事件,但它不工作...(我认为这是因为它被初始化的顺序)。

我读过,这是Silverlight的限制之一,但也许有什么解决办法...

任何想法?提前致谢。

一些代码来说明吧,首先在XAML控件:

<sdk:Label Target="{Binding ElementName=txtNumeroColegiado}" Content="Nº Colegiado" HorizontalAlignment="Right" Margin="5,0" Name="label2" VerticalAlignment="Center" /> 
<TextBox Margin="5,0" Name="txtNumeroColegiado" TabIndex="27" Text="{Binding Medico.colegiado, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True, ValidatesOnDataErrors=True}" VerticalAlignment="Center" Grid.Column="1" /> 

<sdk:Label Target="{Binding ElementName=txtNombreComercial}" Content="Nombre Comercial" HorizontalAlignment="Left" Margin="5,0" Name="label4" VerticalAlignment="Center" Grid.Column="2" /> 
<TextBox Margin="5,0" Name="txtNombreComercial" TabIndex="27" Text="{Binding Medico.nombrecomercial, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True, ValidatesOnDataErrors=True}" VerticalAlignment="Center" Grid.Column="3" /> 

这是我孔德背后:

public DatosMedico() 
{ 
    InitializeComponent(); 
    this.Loaded += new RoutedEventHandler(DatosMedico_Loaded); 
} 

void DatosMedico_Loaded(object sender, RoutedEventArgs e) 
{ 
    this.txtNombreComercial.GetBindingExpression(TextBox.TextProperty).UpdateSource(); 
    this.txtNumeroColegiado.GetBindingExpression(TextBox.TextProperty).UpdateSource(); 
} 

当它试图运行 “updateSource”,这些文本框为空(但他们在页面中完美工作......)。显然,它们在用户输入一些文本时被初始化...

+0

请发送一些验证码 – swinefeaster

+1

这没什么意义。在哪里设置'DataContext'?你为什么要以你的方式强制一个'UpdateSource'?在这一点上,框中的数据都不会改变,请删除该代码。 – AnthonyWJones

+0

DataContext在父页面中设置(这是一个事实上的控件)并且它完美地继承。我让UpdateSource在让用户编辑表单之前强制进行“验证”(我试过它通过带有介体的消息并且控件也为null)... – zapico

回答

0

解决方法是删除内部有很多控件的“ContentPresenter”。

0

猜测,DataContext要么未被设置,要么未设置为您期望它设置为的对象。在调试时检查VS中的输出窗口,你是否看到有关绑定的任何抱怨?

+0

DataContext在父页面中设置(this是事实上的控制)并且它完美地继承了下来。我让该UpdateSource在让用户编辑表单之前强制进行“验证”(我已经通过调解器通过消息尝试过它,并且控件也为null)... – zapico