Wpf 如何获得“;空”;在设计模式下从ObjectDataProvider?
我将其中一个VM的实例放在一个资源字典中,如下所示:Wpf 如何获得“;空”;在设计模式下从ObjectDataProvider?,wpf,xaml,data-binding,Wpf,Xaml,Data Binding,我将其中一个VM的实例放在一个资源字典中,如下所示: <ObjectDataProvider ObjectType="{x:Type WpfApplication1:MyViewModel}" x:Key="TheViewModel"/> 它在运行时运行良好,因为所有连接和服务器都可用,并且许多逻辑对象都已正确初始化 问题是,在设计阶段我遇到了很多异常(有很多这样的VM),这使得工作非常困难 在XAML中,如果CComponentModel:DesignerProperties.I
<ObjectDataProvider ObjectType="{x:Type WpfApplication1:MyViewModel}" x:Key="TheViewModel"/>
它在运行时运行良好,因为所有连接和服务器都可用,并且许多逻辑对象都已正确初始化
问题是,在设计阶段我遇到了很多异常(有很多这样的VM),这使得工作非常困难
在XAML中,如果CComponentModel:DesignerProperties.IsInDesignMode(xmlns:ComponentModel=“clr namespace:System.ComponentModel;assembly=PresentationFramework”)
为true
则x:null
,否则创建我的VMWPFAApplication1:MyViewModel
???
我做了很多尝试,但是没有找到正确的解决方案,但是我不敢相信这是不可能的。对于任何想法(可能是一个测试过的示例),请提前感谢。我在过去处理此问题的方法包括为您的viewmodel提供一个接口,并让视图从viewmodel定位器类中请求其viewmodel。例如,您将拥有以下viewmodels:
public interface IMainViewModel
{
double Foo { get; }
double Bar { get; }
}
public class RealMainViewModel : IMainViewModel
{
// implementation of IMainViewModel, this one does your data access
// and is used at run time
}
public class FakeMainViewModel : IMainViewModel
{
// implementation of IMainViewModel, this one is fake
// and is used at design time
}
viewmodel定位器如下所示:
public class ViewModelLocator
{
public static IMainViewModel MainViewModel
{
get
{
if (Designer.IsDesignMode)
{
return new FakeMainViewModel();
}
else
{
return new RealMainViewModel();
}
}
}
}
最后,您将在App.xaml中包含对ViewModelLocator的引用:
<Application.Resources>
<ResourceDictionary>
<yourNamespace:ViewModelLocator x:Key="ViewModelLocator" />
</ResourceDictionary>
</Application.Resources>
提供了另一个示例。请注意,我是在记事本中动态编写此代码的,因此如果出现任何打字错误,我深表歉意。我相信您可以在UserControl1
标记中使用以下内容来定义设计时DataContext
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DataContext="{x:Null}"
因为我通常不使用designer窗口,所以我没有实际测试过它,但理论上它应该可以工作:)
<WpfApplication1:UserControl1 x:Name="UsrCtrl1" DataContext="{Binding Path=MainViewModel, Source={StaticResource ViewModelLocator}}"/>
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DataContext="{x:Null}"