Как использовать вложенный класс в WPF XAML?

Я рефакторинг кода из образца:

И после исключения класса навыков, с соответствующими изменениями в
в 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?

Смежные вопросы

на основе того же кода:

Обновление (ответ на 1-й комментарий RV1987):

Ответы tp Создание экземпляра вложенного класса в XAML говорит о том, что это возможно, но неясно, как использовать:

  • Ответ от Ludovic говорит, что это возможно, но содержит комментарий, что не ясно, как использовать.
    Это вполне соответствует моему опыту и этому вопросу
  • Другой ответ Townsean основан на цитате из MSDN:
    "Ваш пользовательский класс не должен быть вложенным классом. Вложенные классы и " точка " в их общем синтаксисе использования CLR мешают другим функциям WPF и / или XAML, таким как присоединенные свойства".

    Но, в общем, и для "вашего собственного класса", но в моем конкретном коде, прикрепленном к этому вопросу, есть десятки "точек" (вроде Employee.Skills) и это не мой пользовательский класс, который вложен, но мой пользовательский класс имеет вложенный класс внутри.

Обновление 2 (ответ на второй комментарий-вопрос RV1987):
Да, я только что попробовал этот + подход, который не работает, но:

  • XAML дает мне ошибки даже на отлично работающих элементах
  • Я не пытался использовать отражатель сам или найти какой-либо другой работоспособный подход или менее двусмысленную ссылку от Microsoft на это

1 ответ

Решение

К сожалению, то, что вы хотите сделать, невозможно в XAML (из MSDN):

Ваш пользовательский класс не должен быть вложенным. Вложенные классы и "точка" в их общем синтаксисе использования CLR мешают другим функциям WPF и / или XAML, таким как присоединенные свойства.

Другие вопросы по тегам