Как использовать вложенный класс в WPF XAML?
Я рефакторинг кода из образца:
- 24.129.21. Связывание основных деталей
из C# / Учебник CSharp "Windows Presentation Foundation" Привязка)
И после исключения класса навыков, с соответствующими изменениями в
в 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, таким как присоединенные свойства.