我正在尝试使用MVVM将从WCF服务返回的数据绑定到WPF中的网格。当我在视图模型中使用WCF服务的逻辑时,同样有效。
代码背后:
this.DataContext = new SampleViewModel();
查看/ XAML:
<Window x:Class="Sample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid ItemsSource="{Binding Students}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding ID}" />
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTextColumn Header="Address" Binding="{Binding Address}" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
查看型号:
public List<Student> Students {
get {
var service = new StudentServiceClient();
var students = new List<Student>(service.GetStudents());
return students;
}
}
IStudentService:
[ServiceContract]
public interface IStudentService {
[OperationContract]
IEnumerable<Student> GetStudents();
}
[DataContract]
public class Student {
public string Name { get; set; }
public int ID { get; set; }
public string Address { get; set; }
}
StudentService.svc:
public class StudentService : IStudentService {
public IEnumerable<Student> GetStudents() {
var students = new List<Student>();
for (int i = 0; i < 3; i++) {
students.Add(new Student {
Name = "Name" + i,
ID = i,
Address = "Address" + 1
});
}
return students;
}
}
当我运行应用程序时,我没有在网格中看到蚂蚁记录..
答案 0 :(得分:3)
public List<Student> Students {
get {
var service = new StudentServiceClient();
var students = new List<Student>(service.GetStudents());
return students;
}
}
每次使用/读取学生属性时,此代码将连接到服务器并检索学生。那太慢了。
将Student加载到ViewModel的构造函数中(或在单独的方法/命令中),并从getter返回此集合。
您的解决方案不起作用的原因可能是:
列表不会通知视图集合的更改;改为使用ObservableCollection。
当学生属性发生变化(var students = new List<Student>(service.GetStudents());
)时,视图中没有信息表明该属性已更改;在ViewModel上实现INotifyPropertyChanged。
确保服务返回数据。
答案 1 :(得分:0)
是否有任何绑定错误?或者可能存在服务器问题,并且服务不返回任何条目。您是否调试/断开了属性的getter并检查结果?