我在使用泛型创建类的新实例时遇到问题.我想要做的是拥有一个可以使用DBSet <>或FakeDBSet <>创建的数据库上下文.FakeDBSet将用于测试代码.我目前有一个完整的假数据文本,但它是一个浪费,因为唯一真正的区别是使用的DBSet.我已经研究过使用Activator.CreateInstance()而没有太多运气.
例:
public class Album {}
public class Artist {}
public class MusicStoreContext
{
public IDbSet<Album> Albums { get; set; }
public IDbSet<Artist> Artists { get; set; }
public MusicStoreContext(Type dbSetType)
{
Albums = new (dbSetType)<Album>;
Artists = new (dbSetType)<Artist>;
}
}
public class Startup
{
public Startup()
{
// Production code would do something like this:
MusicStoreContext context = new MusicStoreContext(typeof(DbSet<>));
// Test code would do something like this:
MusicStoreContext testContext = new MusicStoreContext(typeof(FakeDbSet<>));
}
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过这样的事情: …
我有一个应用程序,我通过 xaml 中的数据模板分配每个视图数据上下文。
问题是我现在有一个作为单例实现的视图模型,并且需要有两个视图使用它。
有没有一种方法可以在一个数据模板中设置多个视图?
我知道像下面这样的东西是行不通的,我只是用这个作为我的意思的例子:
<DataTemplate DataType="{x:Type viewModel:ThisViewModel}">
<view:ViewOne />
<view:ViewTwo />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
谢谢
我遇到了一种奇怪的绑定行为,这里描述了。我做了很多故障排除,我得出的结论是,最可能的问题在于我如何设置DataContext
每个选项卡的视图。
我有一个TabControl
其ItemsSource
绑定到列表ViewModels
。
MainView:
<TabControl ItemsSource="{Binding TabList}">
<TabControl.Resources>
<DataTemplate DataType="{x:Type vm:Tab1ViewModel}">
<v:Tab1 />
</DataTemplate>
</TabControl.Resources>
...
</TabControl>
MainViewModel:
public ObservableCollection<TabViewModelBase> TabList { get; set; }
public MainViewModel()
{
this.TabList = new ObservableCollection<TabViewModelBase>();
// Tab1ViewModel is derived from TabViewModelBase
this.TabList.Add(new Tab1ViewModel());
}
Run Code Online (Sandbox Code Playgroud)
所以,现在MainViewModel
有一个列表TabViewModelBase
,我相信这是正确的 MVVM 方法。视图 ( Tab1
)TabViewModelBase
是使用 定义的DataTemplate
。
这就是问题所在:
Tab1:
<UserControl.Resources>
<vm:Tab1ViewModel x:Key="VM" />
</UserControl.Resources>
<UserControl.DataContext>
<StaticResourceExtension ResourceKey="VM" />
</UserControl.DataContext>
Run Code Online (Sandbox Code Playgroud)
我想大多数人也会这样做,但是......这种方法有一些 …
我收到以下错误:
过程或函数“procTestReport”需要参数“@StartDate”,但未提供该参数。
当我执行以下代码时:
String[] args = new String[2]{StartDate.ToShortDateString(), EndDate.ToShortDateString()};
lst = dbContext.ExecuteQuery<Summary>("procTestReport", args).ToList<Summary>();
Run Code Online (Sandbox Code Playgroud)
我通过的论点是否应该以不同的方式呈现?从以下链接看来我正确使用了它: https ://msdn.microsoft.com/en-us/library/bb361109.aspx
datacontext ×4
c# ×3
wpf ×2
data-binding ×1
datatemplate ×1
generics ×1
linq ×1
mvvm ×1
system.data ×1
tabcontrol ×1
tdd ×1