【问题标题】:Silverlight not initializing controlsSilverlight 未初始化控件
【发布时间】:2011-09-27 16:20:12
【问题描述】:

我正在尝试在我的 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”时,这些文本框为空(但它们在页面中运行良好......)。显然,当用户输入一些文本时它们会被初始化......

【问题讨论】:

  • 这没有多大意义。在哪里设置DataContext?你为什么要以你现在的方式强制使用UpdateSource?此时框中的任何数据都不会更改,请删除该代码。
  • DataContext 是在父页面中设置的(事实上这是一个控件),并且继承得很好。我让 UpdateSource 在让用户编辑表单之前强制“验证”(我已经通过带有中介的消息进行了尝试,并且控件也为空)...

标签: silverlight


【解决方案1】:

猜测,DataContext 要么未设置,要么未设置为您期望将其设置为的对象。调试时查看VS中的输出窗口,有没有看到绑定的抱怨?

【讨论】:

  • DataContext 是在父页面中设置的(事实上这是一个控件),并且继承得很好。我让 UpdateSource 在让用户编辑表单之前强制“验证”(我已经通过带有中介的消息进行了尝试,并且控件也为空)...
【解决方案2】:

通过删除内部包含许多控件的“ContentPresenter”来解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多