WPF组合框实体框架绑定(MVVM)

WPF组合框实体框架绑定(MVVM),wpf,mvvm,binding,combobox,Wpf,Mvvm,Binding,Combobox,我在WPF应用程序中使用EntityFramework库,我遇到以下问题: 据我所知,我正在使用MVVM模式,并尝试使用EF值进行组合框查找 我有一个Company类,其中包含许多Offices,还有一个类 这是通过EntityFramework建模的,所有链接都是正确的Office有一个CompanyName,它是一个外键。 以下是OfficeView类: public partial class AddOffice : Window { private DBHelper.Resour

我在WPF应用程序中使用EntityFramework库,我遇到以下问题: 据我所知,我正在使用MVVM模式,并尝试使用EF值进行组合框查找

我有一个Company类,其中包含许多Offices,还有一个类 这是通过EntityFramework建模的,所有链接都是正确的Office有一个CompanyName,它是一个外键。 以下是OfficeView类:

public partial class AddOffice : Window
{
    private DBHelper.ResourceManagementContext context = new DBHelper.ResourceManagementContext();
    public AddOffice()
    {
        InitializeComponent();
        context.Companies.Load(); 
        this.DataContext = context.Companies.Local; 
        //this.DataContext = new AddOfficeViewModel();
    }

    public void CloseCommandHandler(object sender, ExecutedRoutedEventArgs e)
    {
        this.Close();
    }
}
以下是相应的XAML:

  <Label Grid.Row="4" Grid.Column="0" Margin="10,10">Company:</Label>
    <ComboBox Grid.Row="4" Grid.Column="1" Margin="10,10"
              ItemsSource="{Binding}"
              DisplayMemberPath="CompanyName"
              SelectedValuePath="CompanyName"
              SelectedValue="{Binding Path=CompanyName}"/>
我知道MVVM模式通常会将ViewModel传递给视图,那么如何使用OfficeViewModel将EntityFramework公司列表绑定到组合框呢

我了解组合框的属性。我知道所选的值将是Office对象中的CompanyName,SeletecValuePath将是Company对象中的CompanyName。

在视图模型中:

    class OfficeViewModel
{

    private string _CompanyName;

    public string CompanyName
    {
        get
        {
            return _CompanyName;
        }
        set
        {
            _CompanyName = value;
            NotifyPropertyChanged("CompanyName");
        }
    }

    private List<Location> _CompanyList;

    public List<Location> CompanyList
    {
        get
        {
            return _CompanyList;
        }
        set
        {
            _CompanyList = value;
            NotifyPropertyChanged("CompanyList");
        }
    }

    public List<Company> GetCompanyList()
    {
        return (from comp in Entity.Companies select comp).ToList(); 
    }
}
在window.resources中添加以下内容:

<Window.Resources>
    <ViewModels:OfficeViewModel x:Key="OfficeController"/>       
</Window.Resources>
将视图模型绑定到组合框:

 <Label Grid.Row="4" Grid.Column="0" Margin="10,10">Company:</Label>
 <ComboBox Grid.Row="4" Grid.Column="1" Margin="10,10"
          ItemsSource="{Binding CompanyList, Source={StaticResource OfficeController}}"
          DisplayMemberPath="CompanyName"
          SelectedValuePath="CompanyName"
          SelectedValue="{Binding Path=CompanyName}"/>
希望这对您有所帮助。

视图模型:

    class OfficeViewModel
{

    private string _CompanyName;

    public string CompanyName
    {
        get
        {
            return _CompanyName;
        }
        set
        {
            _CompanyName = value;
            NotifyPropertyChanged("CompanyName");
        }
    }

    private List<Location> _CompanyList;

    public List<Location> CompanyList
    {
        get
        {
            return _CompanyList;
        }
        set
        {
            _CompanyList = value;
            NotifyPropertyChanged("CompanyList");
        }
    }

    public List<Company> GetCompanyList()
    {
        return (from comp in Entity.Companies select comp).ToList(); 
    }
}
在window.resources中添加以下内容:

<Window.Resources>
    <ViewModels:OfficeViewModel x:Key="OfficeController"/>       
</Window.Resources>
将视图模型绑定到组合框:

 <Label Grid.Row="4" Grid.Column="0" Margin="10,10">Company:</Label>
 <ComboBox Grid.Row="4" Grid.Column="1" Margin="10,10"
          ItemsSource="{Binding CompanyList, Source={StaticResource OfficeController}}"
          DisplayMemberPath="CompanyName"
          SelectedValuePath="CompanyName"
          SelectedValue="{Binding Path=CompanyName}"/>

希望这对您有所帮助。

如果您将datacontext设置为.Local,则应向我们展示此类中的代码。从您发布的xaml-.Local是某种类型的集合,此集合中的每个项至少应有一个公共属性CompanyName。是这样吗?如果您将datacontext设置为.Local,则应该向我们显示此类中的代码。从您发布的xaml-.Local是某种类型的集合,此集合中的每个项至少应有一个公共属性CompanyName。是这样吗?太好了!我将GetCompanyList更改为void,并从OfficeViewModel的构造函数中调用它。这样可以吗?是的,你也可以用那种方式打电话。太好了!我将GetCompanyList更改为void,并从OfficeViewModel的构造函数中调用它。这样可以吗?可以,你也可以这样打电话。