3

我从启用 Silverlight 的 WCF 服务获取数据并将其绑定到 DataGrid ItemSource。但是我的 ViewModel 的构造函数正在获取一个参数。我正在使用 MVVM。我想将参数从 xaml 传递给构造函数。我必须在这里添加什么?这是我在 xaml 中设置页面的 DataContext 的部分。

<navigation:Page.DataContext>
    <vms:StudentViewModel />
</navigation:Page.DataContext>

这是类的构造函数:

 public StudentViewModel(string type)
    {
        PopulateStudents(type);
    }

另外,这是错误:

类型“StudentViewModel”不能用作对象元素,因为它不是公共的或未定义公共无参数构造函数或类型转换器。

4

1 回答 1

5

如错误消息所示,您只能WPF使用默认的无参数构造函数来实例化对象。所以你最好的选择是制作'Type' aDependencyProperty并为其设置绑定,然后在设置时调用你的PopulateStudents()方法。

public class StudentViewModel : DependencyObject
{
    // Parameterless constructor
    public StudentViewModel()
    {
    }

    // StudentType Dependency Property
    public string StudentType
    {
        get { return (string)GetValue(StudentTypeProperty); }
        set { SetValue(StudentTypeProperty, value); }
    }

    public static readonly DependencyProperty StudentTypeProperty =
        DependencyProperty.Register("StudentType", typeof(string), typeof(StudentViewModel), new PropertyMetadata("DefaultType", StudentTypeChanged));

    // When type changes then populate students
    private static void StudentTypeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var studentVm = d as StudentViewModel;
        if (d == null) return;

        studentVm.PopulateStudents();
    }

    public void PopulateStudents()
    {
        // Do stuff
    }

    // Other class stuff...
}

Xaml

<navigation:Page.DataContext>
    <vms:StudentViewModel StudentType="{Binding YourBindingValueHere}" />
</navigation:Page.DataContext>
于 2013-03-08T15:36:07.480 回答