【发布时间】:2019-11-14 04:08:08
【问题描述】:
我正在尝试在我的应用中显示客户。我已经将 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>
我应该改变什么?
【问题讨论】:
-
AutoGenerateColumns="tue"可能是 o 型吗? -
除了 ItemsSource Binding 不需要是 TwoWay 之外,
ItemsSource="{Binding ClientsView.Customers}中使用的声明的ClientsView属性在哪里。你是如何设置视图的 DataContext 的? -
你不需要
INotifypropertychanged和INotifyCollectionchanged接口与MVVM轻工具包一起工作吗?自己从来没用过…… -
您可以使用 spy 来检查您的属性是否为空。
-
很有可能,您的
GetCustomers方法更改了Customers属性(分配一个新的 ObservableCollection 实例)在绑定建立之后。由于Customers属性设置器在Customers属性更改时不会发出属性更改通知(它不做任何事情,它只是你老的琐碎的自动实现的属性),绑定机制不会知道该属性已更改,因此不会将新的 ObservableCollection 实例转发到 DataGrid。 (您的customer属性也存在类似问题)
标签: c# wpf mvvm mvvm-light observablecollection