【发布时间】:2010-05-17 17:51:26
【问题描述】:
我正在使用 MVVm 工具包在 WPF 中编写应用程序,但在连接视图模型和视图时遇到问题。
模型是使用 ado.net 实体框架创建的。
视图模型:
public class CustomerViewModel
{
private Models.Customer customer;
//constructor
private ObservableCollection<Models.Customer> _customer = new ObservableCollection<Models.Customer>();
public ObservableCollection<Models.Customer> AllCustomers
{
get { return _customer; }
}
private Models.Customer _selectedItem;
public Models.Customer SelectedItem
{
get { return _selectedItem; }
}
public void LoadCustomers()
{
List<Models.Customer> list = DataAccessLayer.getcustomers();
foreach (Models.Customer customer in list)
{
this._customer.Add(customer);
}
}
}
还有视图(目前没有代码):
<UserControl x:Class="Customers.Customer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
xmlns:vm ="clr-namespace:Customers.ViewModels"
d:DesignHeight="300" d:DesignWidth="300"
xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit" >
<Grid>
<toolkit:DataGrid ItemsSource="{Binding AllCustomers}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" AutoGenerateColumns="True">
</toolkit:DataGrid>
<toolkit:DataGrid ItemsSource="{Binding SelectedItem.Orders}">
</toolkit:DataGrid>
</Grid>
</UserControl>
和dataaccesslayer类:
class DataAccessLayer
{
public List<Customer> customers = new List<Customer>();
public static List<Customer> getcustomers()
{
entities db = new entities();
var customers = from c in db.Customer.Include("Orders")
select c;
return customers.ToList();
}
}
问题是没有数据显示仅仅因为数据上下文没有设置。我试图在代码隐藏中做到这一点,但没有奏效。无论如何,我宁愿在 xaml 文件中执行此操作。另一个问题是 SelectedItem 绑定 - 代码从未使用过。
【问题讨论】:
-
在您的代码中,您的视图模型上有一个 AllCustomers 属性,但您绑定到客户。
-
我正在稍微清理代码并打错了字。工作代码中的绑定当然是正确的。
标签: wpf mvvm data-binding