Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何访问和获取另一个类的属性?_C#_Wpf_Mvvm - Fatal编程技术网

C# 如何访问和获取另一个类的属性?

C# 如何访问和获取另一个类的属性?,c#,wpf,mvvm,C#,Wpf,Mvvm,我有一个应用程序WPF MVVM,它允许员工创建一个或多个项目,每个项目都属于员工,因此我的问题是: 当我添加一名员工时,我还想添加一个项目,以便项目接收员工的ID,以便我可以确定员工与项目之间的关系。以下是一个例子: Employee (Id = 1) --------> Project (id = 1)   Project (id = 2)   Project (id = 3)

我有一个应用程序WPF MVVM,它允许员工创建一个或多个项目,每个项目都属于员工,因此我的问题是: 当我添加一名员工时,我还想添加一个项目,以便项目接收员工的ID,以便我可以确定员工与项目之间的关系。以下是一个例子:

Employee (Id = 1) --------> Project (id = 1)
                            Project (id = 2) 
                            Project (id = 3)

Employee (Id = 2) --------> Project (id = 4) 
                            Project (id = 5) 
                            Project (id = 6)
这是我的密码:

员工视图模型:

public class EmployeeViewModel
{
    Employee _employee = new Employee();

    private IList<Project> _ListeProject;

    public IList<Project> ListeProject
    { get; set; }

    public void InsetEmployee(Employee Employee)
    {
        context.Employee.Add(Employee);
        context.Entry(Employee).State = EntityState.Added;
        context.SaveChanges();
    }

    private void AddEmployee()
    { InsetEmployee(_employee); }
}
public class ProjectViewModel 
{
    Project _project = new Project();
    ProjectBL _projectBL = new ProjectBL ();

    private void AddProject()
    { _projectBL.InsetProject(_project); }        
}
Employee.xaml:

<telerik:RadButton  Content="Add" Height="23" Name="btnAdd"
    HorizontalAlignment="Stretch" VerticalAlignment="Bottom"
    Width="120" Command="{Binding AddEmployeeCMD}"/>
<telerik:RadButton   Content="Add Project" Height="23"
    HorizontalAlignment="Stretch" VerticalAlignment="Bottom"
    Width="120" Click="Project"/>


这一切都取决于您如何存储它等等。若它存储在关系数据库中,那个么最简单的事情就是创建foreing键,这将是一对多关系,其中一个员工有多个项目,但每个项目只有一个所有者(员工)。然后在代码中,您必须具有反映这种关系的属性,例如,Project将具有EmployeeId属性,Employee将项目ID列表作为属性。如果不想更改类,也可以使用单独的表/对象来存储关系。

似乎是一个足够简单的问题

class Employee
{
    public int Id { get; set; }
    public IEnumerable<Project> Projects { get; set; }
}

class Project
{
    public int EmployeeId { get; set; }
    public string Name { get; set; }
}

var employee = new Employee { Id = 1, Projects = new List<Project>
{
    new Project { EmployeeId = 1, Name = "Foo" },
    new Project { EmployeeId = 1, Name = "Bar" }
}};
class员工
{
公共int Id{get;set;}
公共IEnumerable项目{get;set;}
}
班级项目
{
public int EmployeeId{get;set;}
公共字符串名称{get;set;}
}
var employee=new employee{Id=1,Projects=new List
{
新项目{EmployeeId=1,Name=“Foo”},
新项目{EmployeeId=1,Name=“Bar”}
}};

从编写一些代码开始。如果您不能解决这个问题,请使用viewmodel和类定义中的适当代码更新该问题,其他人将能够帮助您解决问题。请将var employee=new employee{Id=1,Projects=new List{new Project{EmployeeId=1,Name=“Foo”},new Project{EmployeeId=1,Name=“Bar”};发布更多代码。很难从您发布的几个片段中获得任何上下文。什么是
InsetEmployee
。请同时发布xaml。是的,我这样做了,但我的问题是,在添加新项目时,我希望该项目获得员工id。您需要将员工id传递给AddProject方法,从您显示的代码中,无法做到这一点,因为您在ProjectViewModel中创建项目,在EmployeeViewModel中创建员工。基本上,您需要以某种方式连接它们,例如,将AddProject公开并从EmployeeViewModel调用它,我真的不明白为什么您的ViewModels中有一个Project和Employee实例,以及为什么要将其传递给InsertX函数。这是一个参考,所以你永远不会用这种方法在你的应用程序中创建多个参考。