0
我建立了一個小視圖定位器。設計時間視圖不顯示
public abstract class ViewModelLocatorBase : IViewModelLocator
{
private readonly static bool isExecutingInDesignMode =
DesignMode.DesignModeEnabled;
public IViewModel ViewModel
{
get { return isExecutingInDesignMode
? LocateDesignTimeViewModel()
: LocateRuntimeViewModel(); }
}
protected abstract IViewModel LocateDesignTimeViewModel();
protected abstract IViewModel LocateRuntimeViewModel();
}
這是用來構建更爲具體的觀點定位的
public class UserEditorViewModelLocator : ViewModelLocatorBase
{
protected override IViewModel LocateDesignTimeViewModel()
{
return new UserEditorViewModelDesignTime();
}
protected override IViewModel LocateRuntimeViewModel()
{
return new UserEditorViewModelRunTime();
}
}
這些都是使用我的意見,以找到正確的視圖模型
public abstract class ViewBase : UserControl
{
public ViewBase()
{
BindViewModelLocatorToView(viewModelLocator: GetViewModelLocator());
}
protected abstract IViewModelLocator GetViewModelLocator();
protected void BindViewModelLocatorToView(IViewModelLocator viewModelLocator)
{
if (viewModelLocator != null)
{
DataContext = viewModelLocator.ViewModel;
}
}
}
通過在提供正確的觀點定位器(最終通過IoC注入)
public sealed partial class UserEditorScreen : ViewBase
{
public UserEditorScreen()
{
this.InitializeComponent();
}
protected override IViewModelLocator GetViewModelLocator()
{
return new UserEditorViewModelLocator();
}
}
現在,這一切都可以在運行時完美運行,但在設計時,視圖因爲調用BindViewModelLocatorToView而中斷。我一直在Xaml中使用這些視圖定位器作爲StaticResources,所以它們似乎在設計時就以這種方式工作,但自從在視圖構造函數中填充DataContext的更改以來,我缺少設計時ViewModel。
的錯誤
此修復該問題,但結合不起作用。我會問另一個問題,因爲他們似乎沒有關係。謝謝! – deanvmc 2012-07-22 16:25:07