24

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

并且在排除 Skills 类之后
, 在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 中?

相关问题

基于相同的代码:

更新(回答 1st RV1987 的评论)

回答 tp在 XAML 中创建嵌套类的实例告诉它是可能的,但不清楚如何使用:

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

    但是,一般来说,对于“你的自定义类”,但是在我附加到这个问题的具体代码中,有几十个“点”(比如Employee.Skills),它不是我的自定义类是嵌套的,但我的自定义类有嵌套类里面。

Update2(回答 2nd RV1987 的评论问题)
是的,我刚刚尝试过+ 方法,但它不起作用,但是:

  • 即使在完美工作的元素上,XAML 也会给我错误
  • 我没有尝试自己使用反射器,也没有找到任何其他可行的方法或来自微软的不那么模棱两可的参考
4

1 回答 1

44

不幸的是,您想要做的事情在 XAML 中是不可能的(来自MSDN):

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

于 2013-01-27T11:33:51.933 回答