Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用参数创建UserControl时遇到问题_C#_Wpf_Xaml_User Controls_Parent - Fatal编程技术网

C# 使用参数创建UserControl时遇到问题

C# 使用参数创建UserControl时遇到问题,c#,wpf,xaml,user-controls,parent,C#,Wpf,Xaml,User Controls,Parent,我在我的一个类中使用了TabControl。但是,我不想膨胀这个类并将所有代码以及TabItems的所有XAML 通过谷歌搜索,我找到了UserControl。因此,我为每个TabItem创建了一个UserControl,其中TabItem的C#code位于UserControl中 这里的问题是,我需要将一些数据从父窗口(包含TabControl)传输到UserControls,以正确显示该选项卡所需的数据 我在XAML中创建了UserControl,代码如下: <TabItem Name

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

通过谷歌搜索,我找到了
UserControl
。因此,我为每个
TabItem
创建了一个
UserControl
,其中
TabItem
的C#code位于
UserControl

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

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

<TabItem Name="userTab" Header="Gebruikers" HorizontalAlignment="Stretch">
        <local:UserTabControl x:Name="userTabPanel"/>
</TabItem>
public partial class CustomUserControl : UserControl
{
   MainForm parentForm;
   public CustomUserControl(MainForm mainForm)
   {
      parentForm = mainForm;
   }
   ... 
   ...
   private void doSomthing()
   {
      parentForm.MainFormMember = 1;
   }
}
这是
UserControl
中的类变量,需要父窗口中的变量:
private static Parser m_config

当我运行此命令时,会出现一个编译错误:

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

指向创建UserControl的XAML行


因此,这里的结论是,我还无法将变量传递给UserControl,我想就如何在这种情况下执行此操作提供一些建议、提示或指导。在实现所需功能方面,我哪里出了问题?

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

对于start,我创建了CustomUserControl类,该类继承自UserControl,constractor将其父表单作为如下属性:

<TabItem Name="userTab" Header="Gebruikers" HorizontalAlignment="Stretch">
        <local:UserTabControl x:Name="userTabPanel"/>
</TabItem>
public partial class CustomUserControl : UserControl
{
   MainForm parentForm;
   public CustomUserControl(MainForm mainForm)
   {
      parentForm = mainForm;
   }
   ... 
   ...
   private void doSomthing()
   {
      parentForm.MainFormMember = 1;
   }
}
以主要形式:

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访问表单组件

UserControl应该公开一个可以绑定到视图模型属性的依赖项属性。在web上搜索MVVM和WPF数据绑定。您始终可以在用户控件中创建接受参数并调用它们的公共方法。我不会在构造函数中填充控件。在该阶段,您仅创建对象。然后可以注入依赖项、绑定依赖项属性、执行数据绑定等。在一些应用程序中,我使用了服务定位器模式,以便应用程序和UI逻辑可以访问数据访问之类的基础设施服务。您是在运行时还是在设计时收到错误?Conrad,我是在设计时收到错误。Christoph,我对C#很陌生,所以不知道依赖项和数据绑定是什么,现在就去谷歌吧!Abhinav,尝试过,不幸的是,我不知道如何在我的UserControl中调用公共方法。克莱门斯,我去看看,谢谢!我不会那样做的。在我看来,UserControl不应该知道它的父窗口!