我有一个主要的wpf窗口:
<Window x:Class="NorthwindInterface.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:ViewModels="clr-namespace:NorthwindInterface.ViewModels" Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<ViewModels:MainViewModel />
</Window.DataContext>
<ListView ItemsSource="{Binding Path=Customers}">
</ListView>
</Window>
MainViewModel是这样的:
class MainViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged = delegate { };
public MainViewModel()
{
Console.WriteLine("test");
using (NorthwindEntities northwindEntities = new NorthwindEntities())
{
this.Customers = (from c in northwindEntities.Customers
select c).ToList();
}
}
public List<Customer> Customers { get;private set; }
现在问题是在designermode中我看不到我的MainViewModel,它突出显示它无法创建MainViewModel的实例。它正在连接到数据库。这就是为什么(当我评论代码时问题得到解决)。
但我不希望如此。有关此问题的最佳实践的解决方案吗?
为什么在使用MVVM时这会起作用:
/// <summary>
/// Initializes a new instance of the <see cref="MainViewModel"/> class.
/// </summary>
public MainViewModel()
{
// Just providing a default Uri to use here...
this.Uri = new Uri("http://www.microsoft.com/feeds/msdn/en-us/rss.xml");
this.LoadFeedCommand = new ActionCommand(() => this.Feed = Feed.Read(this.Uri), () => true);
this.LoadFeedCommand.Execute(null); // Provide default set of behavior
}
它甚至可以在设计时完美地执行。
答案 0 :(得分:10)
如果要在XAML中设置DataContext,可以在ViewModel ctor的顶部使用它:
if (DesignerProperties.GetIsInDesignMode(new DependencyObject()))
return;
答案 1 :(得分:7)
您可以尝试的只是在后面的代码中设置DataContext,看看是否能解决问题。它几乎完全相同,但也许你的IDE正在播放。
DataContext = new MainViewModel();
答案 2 :(得分:5)
这将允许您查看设计师。
public MainViewModel()
{
if (!DesignerProperties.IsInDesignTool)
{
Console.WriteLine("test");
using (NorthwindEntities northwindEntities = new NorthwindEntities())
{
this.Customers = (from c in northwindEntities.Customers
select c).ToList();
}
}
}
答案 3 :(得分:4)
试试这个:
public MainViewModel()
{
if (!System.ComponentModel.DesignerProperties.GetIsInDesignMode(new System.Windows.DependencyObject()))
{
Console.WriteLine("test");
using (NorthwindEntities northwindEntities = new NorthwindEntities())
{
this.Customers = (from c in northwindEntities.Customers
select c).ToList();
}
}
}
答案 4 :(得分:0)
当ViewModel
没有无参数构造函数时,我看到了此错误消息。