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不应该知道它的父窗口!