如何在 WPF XAML 中使用嵌套类

本文关键字:嵌套 XAML WPF | 更新日期: 2023-09-27 17:56:07

我正在重构示例中的代码:

  • 24.129.21. 主细节绑定
    来自 C#/CSharp 教程 » Windows Presentation Foundation » Binding)

排除技能类后,在
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();
    }
  }
}

如果要移动,我应该如何更改窗口 1.XAML:

  • Skill类到Employee

在窗口1.xaml.cs?

相关问题

基于相同的代码:

  • 如何在 WPF XAML 中将自定义类型更改为系统类型(字符串)?

更新(回答第一个RV1987的评论):

答案 tp 在 XAML 中创建嵌套类的实例表明这是可能的,但不清楚如何使用:

  • Ludovic的回答告诉这是可能的,但包含评论,不清楚如何使用。
    这完全符合我的经验和这个问题
  • Townsean 的另一个答案是基于 MSDN 的引用:
    "您的自定义类不得是嵌套类。嵌套类及其常规 CLR 用法语法中的"点"会干扰其他 WPF 和/或 XAML 功能,例如附加属性。

    但是,它是一般的,对于"您的自定义类",但在我附加到此问题的具体代码中,有几十个"点"(如Employee.Skills),嵌套的不是我的自定义类,而是我的自定义类嵌套了类。

更新2(回答第二个RV1987的评论问题):
是的,我刚刚尝试了+方法,这种方法不起作用,但是:

  • XAML 即使在完美工作的元素上也会给我错误
  • 我没有尝试自己使用反射器或从Microsoft中找到任何其他可行的方法或不太模糊的参考

如何在 WPF XAML 中使用嵌套类

不幸的是,您想要执行的操作在 XAML(来自 MSDN)中是不可能的:

自定义类不能是嵌套类。 嵌套类及其常规 CLR 用法语法中的"点"会干扰其他 WPF 和/或 XAML 功能,如附加属性。