サンプルからコードをリファクタリングしています:
そして スキルクラスを除外した後 、対応する変更
inMainWindow.xaml
<local:Team>
<local:Employee Name="Larry" Age="21">
<local:Employee.Skills>
<!-- local:Skills -->
<local:Skills>
inMainWindow1.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で?
同じコードに基づく:
更新(最初のRV1987のコメントに答える):
Answers tp XAMLでネストされたクラスのインスタンスを作成する 可能であるが、使用方法が不明であることを示します。
別の townseanによる回答 は引用に基づいています msdnから :
"カスタムクラスはネストされたクラスであってはなりません。ネストされたクラスとgeneral内の" dot " CLRの使用構文は、添付プロパティなどの他のWPFおよび/またはXAML機能に干渉します。」
しかし、それはgeneralにあり、「your custom class」の場合ですが、この質問に添付されている私のconcreteコードには数十 "ドット"(Employee.Skills
など)であり、ネストされているのはカスタムクラスではありませんが、カスタムクラスにはネストされたクラスがあります。
Update2(2番目のRV1987のコメント-質問に答える):
はい、試しました +アプローチ 、これは機能しませんが、:
残念ながら、XAMLでは実行したいことはできません(from [〜#〜] msdn [〜#〜] ):
カスタムクラスはネストされたクラスであってはなりません。ネストされたクラスとその一般的なCLR使用構文の「ドット」は、添付プロパティなどの他のWPFやXAML機能に干渉します。