希望有些WPF忍者可以向我解释为什么如果我有一个标签控件,并且在我的标签中我将内容(在这种情况下是用户控件)放入ItemsControl或ContentControl中,contentControl中的内容将展开并填满整个屏幕但是如果它是在物品控制中它不会......我认为这个例子会使这个更清楚.
public MainWindow()
{
InitializeComponent();
//This content won't expand to fill the available space
var t1 = new TabItem();
t1.Header = "Tab One";
var ic = new ItemsControl();
ic.Items.Add(new UserControl1());
t1.Content = ic;
//in this case the label will fill up the whole window...
var t2 = new TabItem();
t2.Header = "Tab Two";
var c = new ContentControl();
c.Content = new UserControl1();
t2.Content = c;
MyTab.Items.Add(t1);
MyTab.Items.Add(t2);
}
Run Code Online (Sandbox Code Playgroud)
这是窗口的XAML.
<Grid>
<TabControl Name="MyTab">
</TabControl>
</Grid>
Run Code Online (Sandbox Code Playgroud)
这是用户控件 - 只有标签......
<UserControl x:Class="TabControlTest.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" …Run Code Online (Sandbox Code Playgroud) 所以,我在一个名为Styles.xaml的文件中有一个样式,然后在我的XAML视图中,我在我的资源字典中有一个链接,这一切都正常.
现在,在Expression Blend 4中我有一个列表框,当我点击"ListBox" - >"编辑其他模板" - >"编辑生成的项目容器{ItemsContainerStyle}"但编辑当前显示为灰色 - 我不想编辑样式的副本,这就是我在Styles.xaml文件中只有一个整个应用程序的原因.有人知道为什么吗?如果它可以改变?
当然我只是打开styls.xaml文件并在那里编辑它,但我们都知道我们不能这样做:(
我以为这很容易找到,但遇到了麻烦。我有一个类,它从一个名为EntityBase的类继承,该类具有ID字段。基类看起来像这样。
//Here is the declaration
public abstract class EntityBase<IdType>
//here is the property
private IdType _id;
public virtual IdType ID
{
get
{
return _id;
}
set
{
_id = value;
}
}
Run Code Online (Sandbox Code Playgroud)
这对于大多数实体来说都可以正常工作,但是我们实际上有一个实体是从另一个数据库上运行的存储过程中构建的,而问题与我们的数据库不同,它返回的是“ Id”而不是“ ID”。设置ID,但我不断收到以下错误
NHibernate.PropertyNotFoundException:在类中找不到属性“ Id”的设置器
public class ListingMapping : IAutoMappingOverride<Listing>
{
public void Override(AutoMapping<Listing> mapping)
{
mapping.Map(x => x.ID).Column("Id");
mapping.Id(x => x.ID).Column("Id");
}
}
Run Code Online (Sandbox Code Playgroud)
这是创建实体的方式。
public Listing GetListingById(Guid ListingId)
{
IQuery query = GetSession().GetNamedQuery("GetListingById")
.SetParameter("ListingId", ListingId)
.SetResultTransformer(Transformers.AliasToBean<Listing>());
return (query.UniqueResult<Listing>());
}
Run Code Online (Sandbox Code Playgroud)
我知道自动映射正在加载,因为它们可用于其他类型,其中我们覆盖了该方案。希望这是足够的信息,有人可以指出正确的方向。
我试图模拟一个统一容器 - 我使用Moq并得到这个错误
System.ArgumentException: Invalid setup on a non-overridable member:
c => c.Resolve<ILogisticsAdapter>(new [] {})
Run Code Online (Sandbox Code Playgroud)
这是我测试的设置部分的代码.
var mockContainer = new Mock<IUnityContainer>();
mockContainer.Setup(c => c.Resolve<ILogisticsAdapter>()).Returns(logicsticsAdapter);
IUnityContainer container = mockContainer.Object;
Run Code Online (Sandbox Code Playgroud)
我错过了什么?我不是一般的模拟或单元测试的主人,但从我能说的这应该工作......
以防万一我使用VS2010和MS测试...
谢谢
这是整个测试夹具 - 你可以看到我已经改变它以使用真正的统一容器,但理想情况下我不想创建一个真正的统一容器 - 它不是我正在测试的.但是你可以看到我注释掉的代码......
[TestMethod]
public void WhenContructed_AdapterGetsSet()
{
//Prepare
ILogisticsAdapter logicsticsAdapter = new Mock<ILogisticsAdapter>().Object;
var mockEventAggregator = new Mock<IEventAggregator>();
mockEventAggregator.Setup(x => x.GetEvent<SetHelpMessageEvent>()).Returns(new SetHelpMessageEvent());
IEventAggregator eventAggregator = mockEventAggregator.Object;
IRegionManager regionManager = new Mock<IRegionManager>().Object;
//var mockContainer = new Mock<IUnityContainer>();
//mockContainer.Setup(c => c.Resolve<ILogisticsAdapter>(null)).Returns(logicsticsAdapter);
//IUnityContainer container = mockContainer.Object;
IUnityContainer container = …Run Code Online (Sandbox Code Playgroud) 所以我创建了一个在MVC 4中测试DI的项目.是的,这很容易.我有一个看起来像这样的控制器.
public class CompanyManagementController : Controller
{
private ICompanyService companyService;
public CompanyManagementController(ICompanyService companyService)
{
this.companyService = companyService;
}
public ActionResult Index()
{
return View(companyService.GetCurrentCompanies());
}
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚的是如何告诉视图Index.cshtml我有这个List我将返回它.当我只有一个POCO时,它很容易.我这样做了
[HttpGet]
public ActionResult Create()
{
var company = new Company();
return View(company);
}
[HttpPost]
public ActionResult Create(Company company)
{
using(var context = new InventoryContext())
{
context.Companies.Add(company);
context.SaveChanges();
}
return View("Create");
}
Run Code Online (Sandbox Code Playgroud)
这很简单,因为我刚才说
@model MvcInventoryManager.Models.Company
Run Code Online (Sandbox Code Playgroud)
在Create.cshtml文件中.
任何提示?我想要做的是能够遍历返回的公司列表.
谢谢!
这让我感觉像一个傻瓜,但我怎么说
previousError = currentError;
Run Code Online (Sandbox Code Playgroud)
我的意思是当然不起作用,如果我更改当前错误然后更改以前的错误 - 必须有一个简单的方法来执行此操作...我有一个扩展方法,创建我在上面使用的对象的深层克隆一直都在工作,但我认为整数应该比序列化和反序列化更容易吗?
啊......谢谢