Я пишу тесты, которые проверят правильность элементов 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);
}
}
Здесь я создаюОкно и помещение массива как DataContext
в это окно.Я привязываю Window.Title
к Array.Length
, поэтому я ожидаю увидеть число 5
, напечатанное на консоли.Но пока у меня Show
окно (закомментированная строка), я получу пустую строку.Если я раскомментирую эту строку, я получу желаемый 5
в выводе консоли.
Есть ли способ, которым я могу сделать привязку, не показывая окно?При запуске тестов довольно раздражающе смотреть на ~ 20 окон.
PS: я знаю, что могу сделать окна более прозрачными и т. Д., Но я ищу более элегантное решение.
ОБНОВЛЕНИЕ Код выше - упрощенная версия того, что у меня действительно есть.В реальном коде я получаю View
(некоторые UIElement
с привязками) и object ViewModel
.Я не знаю, какая именно привязка была установлена на View
, но я все еще хочу, чтобы все они были инициализированы.
ОБНОВЛЕНИЕ 2 : Ответы на вопросы о том, что я тестирую и почему.Я не собираюсь проверять, что такие классы, как Binding
, BindingBase
и т. Д. Работают должным образом, я предполагаю, что они работают.Я пытаюсь проверить, что во всех моих файлах XAML я правильно написал привязки.Поскольку привязки являются типами со строковым типом, они не проверяются во время компиляции, и по умолчанию они вызывают только ошибки в окне вывода, которое я иногда пропускаю.Поэтому, если мы возьмем мой пример сверху и сделаем опечатку в привязке: {Binding Lengthhh}
, тогда мои тесты сообщат вам, что для привязки нет свойства с именем Lengthhh
.Таким образом, у меня есть около 100 файлов XAML, и для каждого XAML у меня есть тест (3-5 строк кода), и после запуска моих тестов я знаю , точно , что в моем решении нет ошибок привязки.