我正在尝试在我的应用中显示客户。我已将WPF与MVVM Light一起使用。 当我将视图切换到客户时,我的数据网格为空。为什么不加载?
我的ShellViewModel继承自BaseViewModel。
我正在将用户从MainViewModel发送到我的ClientsViewModel。
ClientsViewModel:
public class ClientsViewModel : ShellViewModel
{
public ObservableCollection<Customer> Customers { get; set; }
public Customer customer { get; set; }
public ClientsViewModel()
{
SetView("Klienci");
Messenger.Default.Register<UserMessage>(this, (message) =>
{
try { User = message.User;
GetCustomers();
}
catch (System.InvalidOperationException e) { }
});
}
private void GetCustomers()
{
Customers = new ObservableCollection<Customer>();
using (var context = new mainEntities())
{
var result = context.customerassigned.Where(c => c.user_id == User.Id).Include(c => c.customer).Where(c=>c.customer.status_id == 1);
foreach (var item in result)
{
Customers.Add(new Customer(item.customer.id, item.customer.name, item.customer.status_id));
}
}
}
}
GetCustomers()方法工作正常。 我在ClientsView中的数据网格:
<DataGrid Name="grdCustomers" SelectedItem="{Binding ClientsView.customer}" ItemsSource="{Binding ClientsView.Customers, Mode=OneWay}" AutoGenerateColumns="true" Height="500"></DataGrid>
我应该改变什么?
答案 0 :(得分:0)
我尝试过这样的事情:
private ObservableCollection<Customer> customers;
public ObservableCollection<Customer> Customers
{
get
{
return customers;
}
set
{
if (customers == value)
return;
customers = value;
RaisePropertyChanged("Customers");
}
}
但是它也不起作用。
如果我返回main并再次访问客户,则客户处于datagrid中。 简单:
public ObservableCollection<Customer> Customers { get; set; }
工作原理相同
答案 1 :(得分:0)
不要创建新的ObservableCollection实例,只需创建一次并根据需要填充它即可。
public ObservableCollection<Customer> Customers { get; } = new ObservableCollection<Customer>();
...
private void GetCustomers()
{
Customers.Clear();
using (var context = new mainEntities())
{
var result = context.customerassigned.Where(c => c.user_id == User.Id).Include(c => c.customer).Where(c=>c.customer.status_id == 1);
foreach (var item in result)
{
Customers.Add(new Customer(item.customer.id, item.customer.name, item.customer.status_id));
}
}
}
还要注意上面的Clemens评论。
您需要
1)创建一个ClientsViewModel实例,并将其分配给View的DataContext。
2)在此情况下,仅绑定到ClientsViewModel类的公共属性-ItemsSouce ==>客户,而不是ClientsView.Customers。