在WPF中强制绑定

Sno*_*ear 19 data-binding wpf unit-testing

我正在编写测试,它将检查BindingXAML中指定的元素的正确性.它们到目前为止工作,唯一的问题是我不知道如何正确地强制数据绑定发生.令人惊讶的是,仅仅设置内容是不够的,在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.TitleArray.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)