无法在silverlight 4.0中的xaml中创建实例

时间:2011-07-09 11:52:36

标签: silverlight silverlight-4.0

在xaml代码中,我收到错误,告诉无法创建实例 这个AllEmployeeViewModel类文件,当我输入scr时,实际上这个类文件存在于解决方案文件夹中:intellsene显示了我的类文件

<UserControl.Resources>
    <scr:AllEmployeeViewModel  x:Key="empName"></scr:AllEmployeeViewModel>
</UserControl.Resources>
<Grid x:Name="MainGrid" Background="White" Width="400"
    Height="407" DataContext="{Binding Source={StaticResource empName}}" >
<Grid  x:Name="grdAllEmp" DataContext="{Binding Path=EmployeeClass}">
    <sdk:DataGrid AutoGenerateColumns="True" Height="274" 
                    HorizontalAlignment="Left" Margin="8,8,0,0" 
                    Name="dgEmployee" VerticalAlignment="Top" Width="385"
                    ItemsSource="{Binding}"/>
    <Button Content="Get All Employees" Height="23" 
            HorizontalAlignment="Left" Margin="12,288,0,0" 
            Name="btnAllEmplloyees" VerticalAlignment="Top" Width="381" 
            Command="{Binding  Path=DataContext.GetEmployees,ElementName=MainGrid}"/>
</Grid>

我正在尝试将数据绑定到网格,如果我忽略编译时错误并运行它会给出找不到的错误密钥。

如果你知道的话,请告诉我解决方案,从过去的2天开始解决这个问题

任何帮助都会很棒 感谢。

5 个答案:

答案 0 :(得分:4)

我也有同样的问题。 cannot create instance of viewmodel

只需复制此代码并将其放在ViewModel

public bool IsDesignTime
{
    get
    {
      return (Application.Current == null) || 
             (Application.Current.GetType() == typeof(Application));
    }
}




//Constructor    
public ViewModelClass()
{
    if(IsDesignTime == false)
    {
       //Your Code 
    }
}

答案 1 :(得分:2)

只需在MainPage.xaml.cs页面中添加此行

即可
InitializeComponent();
        if (!System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
        {
            //Code that throws the exception
        }

它工作正常。

答案 2 :(得分:0)

您的类AllEmployeeViewModel是否具有零参数构造函数?但是,Silverlight无法创建您的类的实例。

答案 3 :(得分:0)

您与EmployeeClass绑定。这必须是某种类型的集合才能使用,但名称EmployeeClass听起来像是一个对象而不是集合。

你真的需要发布你的View Model代码,因为我们不得不猜测它。

我把一个快速示例放在一起,如果ViewModel包含:

public ObservableCollection<EmployeeClass> Employees { get; set; }

我用一些示例EmployeeClass对象填充它们,

public AllEmployeeViewModel()
{
    this.Employees  = new ObservableCollection<EmployeeClass>();
    this.Employees.Add(new EmployeeClass() { Name = "One" });
    this.Employees.Add(new EmployeeClass() { Name = "Two" });

我将绑定更改为:

<Grid  x:Name="grdAllEmp" DataContext="{Binding Path=Employees}">

看起来像这样(没有其他变化): enter image description here

答案 4 :(得分:0)

我得到了同样的错误,我会向你解释它,希望它会对你有所帮助。 在我的 ViewModel 的构造函数中,我执行了一些代码,所有代码都在 if 条件下,但

       If(!IsInDesignMode)
       {
             //  my code
       }

       //   Problamatic method execution point

除了我想要每次执行的方法,但事实证明只有满足上述条件才能执行代码,否则将不会创建视图模型实例。

所以要避免这种情况,你必须这样做:

       If(!IsInDesignMode)
       {
             //  my code
            //   Problamatic method execution point
       }       

将所有代码置于该条件下,一切都会好的。
注意:我正在使用 MVVMLight库以及模型 - 视图 - ViweModel 模式。