То, как я справлялся с этим в прошлом, заключается в предоставлении интерфейса для ваших моделей представления и в том, чтобы представления запрашивали их модель представления из класса локатора модели представления. Например, у вас есть следующие модели представления:
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
}
Локатор видовой модели будет выглядеть следующим образом:
public class ViewModelLocator
{
public static IMainViewModel MainViewModel
{
get
{
if (Designer.IsDesignMode)
{
return new FakeMainViewModel();
}
else
{
return new RealMainViewModel();
}
}
}
}
Наконец, вы включите ссылку на ViewModelLocator в App.xaml:
<Application.Resources>
<ResourceDictionary>
<yourNamespace:ViewModelLocator x:Key="ViewModelLocator" />
</ResourceDictionary>
</Application.Resources>
Таким образом, вы можете привязаться к свойству viewmodel в ViewModelLocator и заставить ваш код выполнять работу для введения действительного и поддельного viewmodel, когда это необходимо:
<WpfApplication1:UserControl1 x:Name="UsrCtrl1" DataContext="{Binding Path=MainViewModel, Source={StaticResource ViewModelLocator}}"/>
Я также нашел статью , в которой приведен еще один пример. Обратите внимание, что я написал этот код на лету в блокноте, поэтому я прошу прощения, если есть какие-либо опечатки.