如何在 WPF XAML 中使用嵌套类?
Posted
技术标签:
【中文标题】如何在 WPF XAML 中使用嵌套类?【英文标题】:How to use nested class in WPF XAML? 【发布时间】:2013-01-10 20:46:18 【问题描述】:我正在重构示例中的代码:
24.129.21. Master Detail Binding 来自C# / CSharp Tutorial » Windows Presentation Foundation » 绑定)还有after excluding Skills class,有相应的变化 在 MainWindow.xaml
<local:Team>
<local:Employee Name="Larry" Age="21">
<local:Employee.Skills>
<!-- local:Skills -->
<local:Skills>
在MainWindow1.xaml.cs中:
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Windows;
namespace WpfApplication
public class Skill
//I'd like to exclude class Skill having moved it into class Employee as nested one
public string Description get; set;
public class Employee
public string Name get ; set;
public int Age get; set;
public List<Skill> Skills get; set;
public Employee()
Skills=new List<Skill>();
/*class Skill
public string Description get; set;
*/
public class Team : ObservableCollection<Employee>
public class Company
public string CompanyName get ; set;
public Team Members get ; set;
public class Companies : ObservableCollection<Company>
public partial class Window1 : Window
public Window1()
InitializeComponent();
如果要移动,我应该如何更改 Window1.XAML:
Skill
类进入Employee
类
在 Window1.xaml.cs 中?
相关问题
基于相同的代码:
How to change a custom type to System type (string) in WPF XAML?更新(回答 1st RV1987 的评论):
答案 tp Creating an instance of a nested class in XAML 告诉它是可能的,但不清楚如何使用:
answer by Ludovic 告诉它是可能的,但包含不清楚如何使用的注释。 这很符合我的经验和这个问题另一个answer by townsean是基于引用from msdn: “您的自定义类不能是嵌套类。嵌套类及其 general CLR 使用语法中的 “点” 会干扰其他 WPF 和/或 XAML 功能,例如附加特性。”
但是,它在 general 中,对于“您的自定义类”,但在我附加到这个问题的 concrete 代码中,有几十个 “点” (如Employee.Skills
),嵌套的不是我的自定义类,而是我的自定义类里面有嵌套类。
Update2(回答 2nd RV1987 的评论问题): 是的,我刚刚试过+ approach,它不起作用,但是:
即使在完美工作的元素上,XAML 也会给我错误 我自己没有尝试使用反射器,也没有找到任何其他可行的方法或来自 Microsoft 的不那么含糊的参考【问题讨论】:
无法在 xaml 中创建嵌套类对象。请参阅此链接 - ***.com/questions/4269896/… 真的,你的链接告诉它是可能的。查看我的更新 你试过+
的方法吗?它会给出解析错误。
你想让<local:Skill>
填充你的<local:Skills>
但Skill
类是Employee
类中的嵌套类。
@GennadyVanin--ГеннадийВанин 我认为您正在寻找的东西是可能的,但过于复杂。使用 Employee.Skills.Description 在 XAML 中绑定到嵌套属性非常容易。对于此类实体的创建和管理,使用 MVVM 方法并使用 C# 代码在 ViewModel 中创建它们会更容易。
【参考方案1】:
不幸的是,您想做的事情在 XAML 中是不可能的(来自MSDN):
您的自定义类不能是嵌套类。嵌套类及其常规 CLR 使用语法中的“点”会干扰其他 WPF 和/或 XAML 功能,例如附加属性。
【讨论】:
以上是关于如何在 WPF XAML 中使用嵌套类?的主要内容,如果未能解决你的问题,请参考以下文章