Sno*_*ear 19 data-binding wpf unit-testing
我正在编写测试,它将检查Binding
XAML中指定的元素的正确性.它们到目前为止工作,唯一的问题是我不知道如何正确地强制数据绑定发生.令人惊讶的是,仅仅设置内容是不够的,在DataContext
显示控件/窗口之前不会发生绑定.请注意,我正在编写'单元'测试,我想避免显示任何窗口.
看看下面的代码:
// This is main class in console application where I have all WPF references added
public class Program
{
[STAThread]
public static void Main()
{
var view = new Window();
BindingOperations.SetBinding(view, Window.TitleProperty, new Binding("Length"));
view.DataContext = new int[5];
//view.Show(); view.Close(); // <-- this is the code I'm trying not to write
Console.WriteLine(view.Title);
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我正在创建一个Window并DataContext
为该窗口放置一个数组.我绑定Window.Title
了Array.Length
所以我希望5
在控制台中看到数字.但是直到我Show
窗口(注释行)我才会得到空字符串.如果我取消注释该行,那么我将5
在控制台输出中收到所需的内容.
有没有办法在不显示窗口的情况下进行绑定?在启动测试时查看~20个窗口非常烦人.
PS:我知道我可以让窗户更透明等等,但我正在寻找更优雅的解决方案.
UPDATE上面的代码是我真正拥有的简化版本.在实际代码中,我收到View
一些(有些UIElement
绑定)和object ViewModel
.我不知道哪个具有完全绑定View
,但我仍然希望所有这些都被初始化.
更新2:回答有关我测试的内容和我的原因的问题.我不打算测试的类一样Binding
,BindingBase
等是否按预期工作,我认为他们的工作.我正在尝试在我的所有XAML文件中测试我已正确编写绑定.因为绑定是字符串类型的东西,所以它们在编译期间不会被验证,并且默认情况下它们只会导致输出窗口中的错误,我偶尔会错过这些错误.因此,如果我们从上面拿出我的例子,如果我们在绑定中输入错误:{Binding Lengthhh}
那么我的测试将通知您没有Lengthhh
可用于绑定的名称的属性.所以我有大约100个XAML文件,每个XAML我都有一个测试(3-5行代码),在启动我的测试后,我确信我的解决方案中没有绑定错误.
mdm*_*m20 -1
不确定,但也许这样的东西会起作用?
view.GetBindingExpression(Window.TitleProperty).UpdateTarget();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3323 次 |
最近记录: |