如何在 WPF XAML 中使用嵌套类?

Posted

技术标签:

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

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

24.129.21. Master Detail Binding 来自C# / CSharp Tutorial » Windows Presentation Foundation » 绑定)

还有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 中?

相关问题

基于相同的代码:

How to change a custom type to System type (string) in WPF XAML?

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

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

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

【讨论】:

以上是关于如何在 WPF XAML 中使用嵌套类?的主要内容,如果未能解决你的问题,请参考以下文章

访问嵌套的静态常量 [重复]

Xamarin XAML x:嵌套类中对属性的静态引用

XMAL基础

如何按名称定位具有嵌套样式的 WPF 子控件?

简单的嵌套 TreeView Xaml 结构?

WPF Demo10 嵌套WinformRadGridView