【发布时间】: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 中?
相关问题
基于相同的代码:
更新(回答 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/…
-
真的,你的链接告诉它是可能的。查看我的更新
-
你试过
+的方法吗?它会给出解析错误。 -
你想让
<local:Skill>填充你的<local:Skills>但Skill类是Employee类中的嵌套类。 -
@GennadyVanin--ГеннадийВанин 我认为您正在寻找的东西是可能的,但过于复杂。使用 Employee.Skills.Description 在 XAML 中绑定到嵌套属性非常容易。对于此类实体的创建和管理,使用 MVVM 方法并使用 C# 代码在 ViewModel 中创建它们会更容易。
标签: c# wpf xaml data-binding nested-class