我坐在下面的单元测试前面而没有让它正常工作
[TestMethod]
public void EvenIndexesZeroShouldHaveWhiteBackground()
{
var converterBinding = new Binding("BackgroundConverter");
converterBinding.Converter = new BackgroundConverter();
var lvi0 = new ListViewItem() { Background = Brushes.Gray };
var lv = new ListView();
lvi0.SetBinding(ListViewItem.BackgroundProperty, converterBinding);
lv.Items.Add(lvi0);
Assert.AreEqual(Brushes.White, converterBinding.Converter.Convert(lvi0, null, null, CultureInfo.InvariantCulture));
}
我能够通过直接调用Convert(...)
方法来测试另一个转换器,但它收到了一个简单的数据类型。
我觉得在将{{1}}添加到lvi0
时(或之后手动)我需要触发转换器,但我不知道该怎么做。
有人能指出我正确的方向吗?
我是WPF的新手,并且尚未完全了解Bindings和Dependency Properties :(
[UPDATE]
目前的问题是没有调用ListView
方法。它不是转换器的内容或它返回的结果。
[更新2] @Tatranskymedved评论指出我正确的方向,并直接调用转换器(由@PeterDuniho提出)现在工作。我已相应更新了上面的代码段。
[更新3] 这是转换器。我必须传入ListViewItem,因为它正在处理它。目前无法改变它。
Convert
答案 0 :(得分:1)
基本思想是:在WPF中您使用的是Window
/ UserControl
,其中包含布局和控件。如果任何控件应将其属性绑定到ViewModel,则Control
的属性必须定义为DependencyProperty
。如果您只是使用了一些已定义的控件,则无需了解它们。
当您创建自己的UserControl
时,它必须有DependencyProperty
,因此您可以将一端绑定到它。
现在您必须意识到,您想要测试什么。它是绑定吗?还是转换器本身?
对于绑定测试,您可以参考:Unit test WPF Bindings
或者:http://www.wpf-tutorial.com/data-binding/debugging/
但是,谈到单元测试,您应该直接测试Converter,而不是将它们放到像Binding
这样复杂的链对象上。如果测试不起作用,那就是基本的动机,你可以说"问题在于Converter
&#34;,而不是你要绑定的绑定或对象。< / p>
只有您需要检查您设置的值的类型是否正确。对于WPF控制BackgroundProperty
,它应该System.Windows.Media.Brush
与MSDN一样。