24

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

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 からのあいまいでない参照を見つけたりしませんでした
4

1 に答える 1

44

残念ながら、XAMLでは( MSDNから)実行したいことはできません。

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

于 2013-01-27T11:33:51.933 に答える