gpt4 book ai didi

wpf - 在 DataGrid (MVVM) 中显示数据

转载 作者:行者123 更新时间:2023-12-04 05:17:40 24 4
gpt4 key购买 nike

请考虑以下数据模型

由于我是新来的,所以我无法发布图像,所以我会尝试另一种方法...

职位实体
-jobId
-jobNo
-jobStatus(来自状态实体的外键)
-工作日期

状态实体
-statusId
-statusCaption

关系
工作实体 * ------------ 0..1 状态实体

我有一个 WCF 服务,它公开了我的 JobsViewModel 访问的模型

namespace PM.DataService
{
[ServiceContract]
public class PMService
{
[OperationContract]
public ObservableCollection<Job> GetAllJobs()
{
using (var context = new logisticDBEntities())
{
var result = context.Jobs.ToList();
result.ForEach(e => context.Detach(e));
return new ObservableCollection<Job>(result);
}
}

[OperationContract]
public ObservableCollection<Status> GetStatuses()
{
using (var context = new logisticDBEntities())
{
var result = context.Statuses.ToList();
result.ForEach(e => context.Detach(e));
return new ObservableCollection<Status>(result);
}
}
}
}

namespace PM.UI.ViewModel
{
public class JobsViewModel:INotifyPropertyChanged
{
private PMServiceClient serviceClient = new PMServiceClient();

public JobsViewModel()
{
this.RefreshStatuses();
this.RefreshAllJobs();
}

private void RefreshAllJobs()
{
this.serviceClient.GetAllJobsCompleted += (s, e) =>
{
this.allJobs = e.Result;
};
this.serviceClient.GetAllJobsAsync();
}

private void RefreshStatuses()
{
this.serviceClient.GetStatusesCompleted += (s, e) =>
{
this.Statuses = e.Result;
};
this.serviceClient.GetStatusesAsync();
}

private ObservableCollection<Job> allJobs;
public ObservableCollection<Job> AllJobs
{
get{
return this.allJobs;
}
set
{
this.allJobs = value;
OnPropertyChanged("AllJobs");
}
}

private ObservableCollection<Status> statuses;
public ObservableCollection<Status> Statuses
{
get
{
return this.statuses;
}

set
{
this.statuses = value;
this.OnPropertyChanged("Statuses");
}
}

private void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
}

我在 MainWindow 的 xaml 中包含了 JobsViewModel
<Window x:Class="PM.FullClient.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:PM.UI"
xmlns:vms="clr-namespace:PM.UI.ViewModel"
Title="MainWindow" Height="475" Width="575">
<Window.DataContext>
<vms:JobsViewModel/>
</Window.DataContext>
....

现在我可以通过绑定(bind)显示所有状态轻松地在我的 MainWindow 上填充 DataGrid
<DataGrid ItemsSource="{Binding Path=Statuses}" Margin="7,8,9,8" AutoGenerateColumns="True">

它有效,但我无法显示输出因为我无法在此处发布图像

但是当我尝试对乔布斯做同样的事情时……什么都没有发生。 数据网格为空
<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding Path=AllJobs}" Margin="6">
</DataGrid>

我已经通过许多方法搜索了大量的fourms和网站,最后我在这里。

可能是因为 Jobs 和 Statuses 之间的 Status > Job 关系吗?如果是这样,我该如何解决这个问题,如果不是我做错了什么?

最佳答案

问题是在 RefreshAllJobs() 回调中,您设置了 所有职位 字段(小写“a”),而不是 全部职位 属性(大写“A”),然后 OnPropertyChanged() 永远不会从属性 setter 中调用。

关于wpf - 在 DataGrid (MVVM) 中显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14051369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com