0

在此处输入图像描述我正在尝试使用 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;
        }
    }

学生服务:

[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; }
}

学生服务.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;
    }
}

当我运行该应用程序时,我没有在网格中看到蚂蚁记录..

4

2 回答 2

3
public List<Student> Students {
    get {
        var service = new StudentServiceClient();
        var students = new List<Student>(service.GetStudents());
        return students;
    }
}

每次使用/读取 Students 属性时,此代码都会连接到服务器并检索学生。那会太慢了。

在 ViewModel 的构造函数中(或在单独的方法/命令中)加载学生,并从 getter 中返回此集合。

您的解决方案不起作用的原因可能是:

  1. List 不会通知 View 集合的变化;改用 ObservableCollection。

  2. 当 Students 属性更改 ( var students = new List<Student>(service.GetStudents());) 时,不会向 View 发出该属性已更改的信号;在 ViewModel 上实现 INotifyPropertyChanged。

  3. 确保服务返回数据。

于 2012-05-21T09:26:34.647 回答
0

Are there any binding errors? Or maybe there is a serviceside problem, and the service returns no entries. Did you debug / breakpoint the property's getter and check the result?

于 2012-05-21T09:16:52.770 回答