【问题标题】:How to change the WPF XAML to reflect changes in the C# code-behind?如何更改 WPF XAML 以反映 C# 代码隐藏中的更改?
【发布时间】:2013-01-10 07:10:38
【问题描述】:

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

我来到以下 C# 代码隐藏,使用相同的 XAML 运行:

namespace WpfApplication1 
{
    public class Skill
      {
        public string Description { get; set; }
      }

      //I'd like to comment out the next line
      public class Skills : ObservableCollection<Skill>{  }

        public class Employee 
      {
        public string Name { get  ; set; }
        public int Age  { get; set; }
        //public Skills Skills { get; set; }
        //instead of line above - works!
        public ObservableCollection<Skill> Skills { 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 MainWindow : Window
        {
        public MainWindow()
      {
          InitializeComponent();
      }
    }
}

即改变自

  • public Skills Skills { get; set; }

  • public ObservableCollection&lt;Skill&gt; Skills { get; set; }

Employee类中

因此,我想摆脱,即注释掉该行:

public class Skills : ObservableCollection<Skill>{  }

但我得到了:

错误 1 ​​标签 'Skills' 在 XML 命名空间中不存在 'clr 命名空间:_24_129_21_Master_Detail_Binding'。第 13 行位置 34

Window1.xaml

<local:Team>
  <local:Employee Name="Larry" Age="21">
    <local:Employee.Skills>
       <local:Skills>

如何更改 XAML 才能做到这一点?

我应该如何为此更改 XAML?

【问题讨论】:

    标签: c# wpf xaml data-binding master-detail


    【解决方案1】:

    在您的 Window1.xaml 课程中删除对技能课程的引用:(例如 &lt;local:Skills&gt; )因为您不再拥有技能课程。相反,您希望在 ObservableCollection 中包含许多 Skill 元素:

    <local:Team>
       <local:Employee Name="Larry" Age="21">
         <local:Employee.Skills>
            <local:Skill />
            <local:Skill />
           ....
    

    此外,您可能应该在 Employee 的构造函数中初始化 Skills ObservableCollection。

    【讨论】:

    • 哇,谢谢。为什么之前不需要初始化collection?
    • 因为在它是一个类之前,当你写 &lt;local:Skills&gt; 它使用默认构造函数,所以类被初始化。现在,它是类中的一个属性,所以它需要初始化。
    猜你喜欢
    • 2012-05-07
    • 1970-01-01
    • 2015-08-10
    • 2015-06-06
    • 2012-05-30
    • 1970-01-01
    • 2016-08-04
    • 2021-12-06
    • 2012-06-19
    相关资源
    最近更新 更多