web-dev-qa-db-ja.com

WPF XAMLでネストされたクラスを使用するにはどうすればよいですか?

サンプルからコードをリファクタリングしています:

そして スキルクラスを除外した後 、対応する変更
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でネストされたクラスのインスタンスを作成する 可能であるが、使用方法が不明であることを示します。

  • Ludovicによる回答 可能であると述べていますが、使用方法が明確ではないというコメントが含まれています。
    これは私の経験とこの質問と完全に一致しています
  • 別の townseanによる回答 は引用に基づいています msdnから
    "カスタムクラスはネストされたクラスであってはなりません。ネストされたクラスとgeneral内の" dot " CLRの使用構文は、添付プロパティなどの他のWPFおよび/またはXAML機能に干渉します。」

    しかし、それはgeneralにあり、「your custom class」の場合ですが、この質問に添付されている私のconcreteコードには数十 "ドット"Employee.Skillsなど)であり、ネストされているのはカスタムクラスではありませんが、カスタムクラスにはネストされたクラスがあります。

Update2(2番目のRV1987のコメント-質問に答える)
はい、試しました +アプローチ 、これは機能しませんが、:

  • XAMLは、完全に機能する要素でもエラーを表示します
  • 私は自分でリフレクターを使用しようとしたり、他の実行可能なアプローチやマイクロソフトからのあいまいさの少ない参照を見つけたりしていません

残念ながら、XAMLでは実行したいことはできません(from [〜#〜] msdn [〜#〜] ):

カスタムクラスはネストされたクラスであってはなりません。ネストされたクラスとその一般的なCLR使用構文の「ドット」は、添付プロパティなどの他のWPFやXAML機能に干渉します。

42
Cédric Bignon