サンプルからコードをリファクタリングしています:
- 24.129.21。
C#からのマスター ディテール バインディング/ CSharp チュートリアル» Windows Presentation Foundation » バインディング)
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 で?
関連する質問
同じコードに基づく:
更新(最初のRV1987のコメントに答える):
Answers tp XAML でネストされたクラスのインスタンスを作成すると、可能であるが使用方法が不明であることがわかります。
- Ludovic の回答は可能であると述べていますが、使用方法が明確ではないというコメントが含まれています。
これは私の経験とこの質問とかなり一致しています townsean による別の回答は、msdnからの引用に基づいています。
「カスタム クラスは、ネストされたクラスであってはなりません。ネストされたクラスと、一般的なCLR 使用構文の「ドット」は、添付プロパティなどの他の WPF および/または XAML 機能に干渉します。」しかし、それは一般的であり、「あなたのカスタムクラス」ですが、この質問に添付された私の具体的なコードには(のような)数十の「ドット」
Employee.Skills
があり、ネストされているのは私のカスタムクラスではありませんが、私のカスタムクラスにはネストされたクラスがあります中身。
Update2 (2 番目の RV1987 のコメント質問に答える) :
はい、私はちょうどその+ アプローチを試しましたが、うまくいきません:
- XAML は、完全に機能している要素でもエラーを返します
- 自分でリフレクターを使用しようとしたり、他の実行可能なアプローチを見つけたり、Microsoft からのあいまいでない参照を見つけたりしませんでした