3

如果接口在不同的项目中,则在ViewModelLocator类的静态构造函数中SimpleIoc.Default.Register<T>();失败模式。IsInDesignModeStatic结果,MainWindow.xaml设计器在设计时是空的。

我做了一个简单的解决方案来测试它。我所做的唯一更改是将DataItem类和IDataService接口移动到域项目中。

在这里下载

我找到了一个解决方法:在 ClientWpf 项目中添加指向 IDataService.cs 的链接。

public class ViewModelLocator {
    static ViewModelLocator() {
        ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

        if (ViewModelBase.IsInDesignModeStatic) {

            // It fails if the IDataService is in different assembly
            // Delete the link of IDataService.cs from the ViewModel folder...
            SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
        }
        else {
            SimpleIoc.Default.Register<IDataService, DataService>();
        }

        SimpleIoc.Default.Register<MainViewModel>();
    }
...
}
4

1 回答 1

4
    if (ViewModelBase.IsInDesignModeStatic) {


        // put these lines here:
        if (SimpleIoc.Default.IsRegistered<IDataService>()) {
            SimpleIoc.Default.Unregister<IDataService>();
        }

        SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
    }
    else {
        SimpleIoc.Default.Register<IDataService, DataService>();
    }
于 2012-11-04T20:04:57.743 回答