【发布时间】:2022-01-28 05:18:54
【问题描述】:
我有一个名为 TransactionTypeEditor 的用户控件
它被用于创建和修改事务类型及其过滤器。
父 UI 元素是 TabItem:
<TabItem Header="TransactionType" x:Name="TransactionTypeEditor_Tab">
<!-- TransactionTypeEditor -->
<transActionTypeNamespace:TransactionTypeEditor></transActionTypeNamespace:TransactionTypeEditor>
</TabItem>
TransactionTypeEditor 在代码中有一个参数,这是TransactionTypeEditor.xaml.cs 中某些应用程序逻辑所必需的:
public partial class TransactionTypeEditor : UserControl
{
public TransactionTypeEditor()
{
InitializeComponent();
}
string[] AvailableFields;
/* ... logic ... */
}
如何在 xaml 创建时将此参数 AvailableFields 从其父级传递给 TransactionTypeEditor?
如果我将参数添加到构造函数中,如下所示,我的应用程序将无法编译:
public TransactionTypeEditor(string[] availableFields)
{
AvailableFields = availableFields
InitializeComponent();
}
一种解决方案是通过应用程序逻辑将TransactionTypeEditor 添加到其父级,例如:
public parent(string[] availableFields)
{
InitializeComponent();
TransactionTypeEditor tEditor = new TransactionTypeEditor(availableFields);
this.TransactionTypeEditor_Tab.Children.Add(tEditor);
}
此解决方法会导致无法加载 xaml 预览,但会正常运行。
我想我发现了类似的问题,例如以下,但无法从他们的回答中得出任何结论: User Control with Input Parameter
【问题讨论】:
-
将 AvailableFields 声明为依赖属性并在 XAML 中分配一个绑定。在依赖属性的PropertyChangedCallback中初始化TransactionTypeEditor。
标签: c# wpf user-interface constructor user-controls