使用参数

时间:2015-04-28 21:33:33

标签: c# wpf xaml user-controls parent

我在其中一个课程中使用TabControl。但是,我不想膨胀这个类并将所有代码放入其中,以及TabItems的所有XAML

经过一些谷歌搜索后,我想出了UserControl。所以我为每个UserControl创建了一个TabItem,其TabItem中的UserControl的C#代码。

这里的问题是,我需要将一些数据从我的父窗口(包含TabControl的窗口)传输到UserControls,以正确显示该选项卡所需的数据。

我在UserControl中创建了XAML,代码如下:

<TabItem Name="userTab" Header="Gebruikers" HorizontalAlignment="Stretch">
        <local:UserTabControl x:Name="userTabPanel"/>
</TabItem>

这是我UserControl的构造函数代码:

public UserTabControl() {
        setUsersView(); // NEED DATA FOR THIS
        setUserData((User)usersView.SelectedItem);
        InitializeComponent();
 }

这是UserControl中需要父窗口变量的类变量:private static Parser m_config;

当我运行它时,我收到编译错误:

  

“对象引用未设置为对象的实例。”

指向我创建UserControl的XAML行。

所以,这里的结论是我无法将变量传递给UserControl,并希望在这种情况下有一些建议或提示或指导如何做到这一点。我在哪里遇到所需的功能?

1 个答案:

答案 0 :(得分:-1)

我不确定这是最好的方法,但对我来说效果很好。

首先,我创建 CustomUserControl 类继承自 UserControl 的类,使用约束器将其父Form作为属性,如下所示:

public partial class CustomUserControl : UserControl
{
   MainForm parentForm;
   public CustomUserControl(MainForm mainForm)
   {
      parentForm = mainForm;
   }
   ... 
   ...
   private void doSomthing()
   {
      parentForm.MainFormMember = 1;
   }
}

在MainForm中:

public partial class MainForm : Form
{
   private int MainFormMember{ get; set; }
   private CustomUserControl customUserControl;

   public MainForm()
   {
        InitializeComponent();

        // Create and add the CustomUserControl manually and not from ToolBox
        customUserControl = new CustomUserControl(this);
        this.Controls.Add(customUserControl);
   }

   ...
   ...
}

通过这种方式,您可以从UserControl

访问Form组件