2011-09-27 95 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