1

重複の可能性:
WPF XAML でネストされたクラスを使用するには?

サンプルからコードを屈折させています:

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 remove class Skill having moved property string Description into class Employee 
    public string Description { get; set; }
  }

   public class Employee 
   {
    public string Name { get  ; set; }
    public int Age  { get; set; }
//I'd like to change in the next line Skill --> String               
    public List<Skill> Skills { get; set; }
    //public List<String> Skills { get; set; }

     public Employee()
     {
//I'd like to change in the next line Skill --> String       
       Skills=new List<Skill>();
       //Skills=new List<string>();
     }
  }

  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 を変更する必要がありますか:

  • List<Skill>List<String>

Window1.xaml.cs で?

同じコードに基づく関連する質問:

更新:
私が間違ったことに注意してください:

  • A の代わりに "A" (引用符なし)。
  • XAMLである必要がありますString(ただし、そうではありませんstring) (C# ではstringまたはString)
  • 次の代わりに、既存のコードに従って、Aを属性として1つのタグに配置しようとしました<sys:String /> : <sys:String>A</sys:String>
4

1 に答える 1

2

これが、あなたが望んでいた新しいアプローチを備えた Employee クラスになります-

public class Employee
{
    public string Name { get; set; }
    public int Age { get; set; }
    public List<String> Skills { get; set; }

    public Employee()
    {
        Skills=new List<string>();
    }
}

このように、xaml ファイルでインスタンスを作成できます。

        <local:Team x:Key="teams">
            <local:Employee Name="Larry" Age="21">
                <local:Employee.Skills>
                    <sys:String>A</sys:String>
                    <sys:String>B</sys:String>
                    <sys:String>C</sys:String>
                </local:Employee.Skills>
            </local:Employee>
        </local:Team>

sysxaml で文字列のインスタンスを宣言するには、xaml で名前空間を定義する必要があります。

xmlns:sys="clr-namespace:System;assembly=mscorlib"

上記のコードListBoxとその動作をテストしました-

<ListBox ItemsSource="{Binding Skills, Source={StaticResource teams}}"/>
于 2013-01-27T14:08:46.993 に答える