我正在编写一些单元测试,并且定义了以下控件。
public class MyItemsControl : ItemsControl
{
public DependencyObject ContainerFromIndex(int index)
{
return (FrameworkElement)ItemContainerGenerator.ContainerFromIndex(index);
}
protected override DependencyObject GetContainerForItemOverride()
{
return new MyControl();
}
}
public class MyControl : Control { }
在单元测试中,我正在创建一个带有itemsControl的窗口,并且希望调用GetContainerForItemOverride()方法,因此,每当我将一个项目添加到ItemsControl时,都会为其创建一个容器。但是我不知道如何触发它。
[TestMethod]
public void Test()
{
Window window = new Window();
var model = new ViewModel();
MyItemsControl itemsControl = new MyItemsControl();
window.Content = itemsControl;
itemsControl.Items.Add(model);
var container = itemsControl.ContainerFromDataContext(slideModel);
}
我认为itemsControl.Items.Add(model);
可能最终会调用该方法,但是itemsControl.ContainerFromDataContext(slideModel)
仍返回null而不是类型为MyContainer的容器。我感到很困惑。我怎样才能解决这个问题??谢谢!
顺便说一句,如果不清楚,我不尝试测试ContainerFromDataContext方法。我想测试另一种方法,但是要测试它,我需要每个项目都有一个容器,但是我无法弄清楚如何进行测试