2

我创建了一个包含 12 个标签的自定义 UserControl。

在此处输入图像描述

现在,当程序加载时,需要更改以“默认”为内容的标签。

// This is called in my main forms constructor, right before InitializeComponent()
public void ShowRigInfo()
{
    // This is here because if I try to call PopluateLabels, I get an "Object not
    // set to an instance of object" error
    grdRigInfo = new RigInfoGrid();

    var contractor = SplitString("contractor", _rigInfo);
    var projectName = SplitString("projectname", _rigInfo);
    var location = SplitString("location", _rigInfo);
    var operatorName = SplitString("operator", _rigInfo);
    var rigName = SplitString("rigsite_name", _rigInfo);
    var rigManager = SplitString("rigmanager", _rigInfo);

    grdRigInfo.PopulateLabels(contractor, projectName, location, operatorName,
                              rigName, rigManager);
    }

// A public method of my custom UserControl to update label content
public void PopulateLabels(string contractor, string project, string location, 
                           string operatorName, string rigName, string manager)
{
    lblContractor.Content = contractor;
    lblProjectName.Content = project;
    lblLocation.Content = location;
    lblOperator.Content = operatorName;
    lblRigName.Content = rigName;
    lblRigManager.Content = manager;            
}

我的问题是,如何在程序启动时更新标签?感谢您的任何帮助。

编辑

我试图在我的主要形式ShowRigInfo()之前和之后打电话。InitializeComponent()他们都没有改变标签。

编辑 2

好的,我在真正看到答案之前解决了这个问题。我所做的是将我的移动ShowRigInfo()到我的自定义用户控件中,而不是我的主窗体。我不知道为什么我没有从一开始就这样做,但它确实存在。我将研究答案的 DataBinding 部分。谢谢你们。

4

3 回答 3

3

好吧,因为这是 WPF,我建议将这些标签绑定到某种支持(实现)INotifyPropertyChanged 的​​模型中的属性。

如果你用这些词谷歌,你会走得很远。

于 2012-10-26T14:08:48.030 回答
2

为什么不在Loaded事件处理程序中尝试

于 2012-10-26T13:50:35.130 回答
1

AD.Net 是对的:将您的初始设置放入 Loaded 事件中。在构造函数中,您可以使用局部变量,但通常不能使用视觉元素。一旦“Loaded”事件被触发,你所有的 UI 组件都应该可以使用了。

但是,我强烈建议您在标签上使用 DataBinding 和 DataContext,而不是通过公共方法填充它们。最终,如果您开始使用数据网格、树视图和列表视图,您将意识到 WPF 系统是如何围绕绑定构建的。

于 2012-10-26T14:09:20.460 回答