【问题标题】:How to use nested class in WPF XAML?如何在 WPF XAML 中使用嵌套类?
【发布时间】:2013-01-10 20:46:18
【问题描述】:

我正在重构示例中的代码:

还有after excluding Skills class,有相应的变化
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 中?

相关问题

基于相同的代码:

更新(回答 1st RV1987 的评论)

答案 tp Creating an instance of a nested class in XAML 告诉它是可能的,但不清楚如何使用:

  • answer by Ludovic 告诉它是可能的,但包含不清楚如何使用的注释。
    这很符合我的经验和这个问题
  • 另一个answer by townsean是基于引用from msdn:
    “您的自定义类不能是嵌套类。嵌套类及其 general CLR 使用语法中的 “点” 会干扰其他 WPF 和/或 XAML 功能,例如附加特性。”

    但是,它在 general 中,对于“您的自定义类”,但在我附加到这个问题的 concrete 代码中,有几十个 “点” (如Employee.Skills),嵌套的不是我的自定义类,而是我的自定义类里面有嵌套类。

Update2(回答 2nd RV1987 的评论问题)
是的,我刚刚试过+ approach,它不起作用,但是:

  • 即使在完美工作的元素上,XAML 也会给我错误
  • 我自己没有尝试使用反射器,也没有找到任何其他可行的方法或来自 Microsoft 的不那么含糊的参考

【问题讨论】:

  • 无法在 xaml 中创建嵌套类对象。请参阅此链接 - stackoverflow.com/questions/4269896/…
  • 真的,你的链接告诉它是可能的。查看我的更新
  • 你试过+的方法吗?它会给出解析错误。
  • 你想让&lt;local:Skill&gt; 填充你的&lt;local:Skills&gt;Skill 类是Employee 类中的嵌套类。
  • @GennadyVanin--ГеннадийВанин 我认为您正在寻找的东西是可能的,但过于复杂。使用 Employee.Skills.Description 在 XAML 中绑定到嵌套属性非常容易。对于此类实体的创建和管理,使用 MVVM 方法并使用 C# 代码在 ViewModel 中创建它们会更容易。

标签: c# wpf xaml data-binding nested-class


【解决方案1】:

不幸的是,您想做的事情在 XAML 中是不可能的(来自MSDN):

您的自定义类不能是嵌套类。嵌套类及其常规 CLR 使用语法中的“点”会干扰其他 WPF 和/或 XAML 功能,例如附加属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    相关资源
    最近更新 更多