Я пишу тесты, которые будут проверять правильность элементов Binding
, указанных в XAML. Они работают до сих пор, единственная проблема заключается в том, что я не знаю, как правильно заставить привязку данных произойти. Удивительно, что недостаточно просто установить что-то в DataContext
, привязка не произойдет, пока вы не покажете свой элемент управления/окно. Пожалуйста, не то, что я пишу "unit" -тесты, и я бы хотел не показывать какие-либо окна.
Взгляните на следующий код:
// 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 окон при запуске тестов.
P.S.: Я знаю, что я могу сделать окна более прозрачными и т.д., но я ищу более элегантное решение.
UPDATE Код выше - это упрощенная версия того, что у меня действительно есть. В реальном коде я получаю View
(некоторые UIElement
с привязками) и object ViewModel
. Я не знаю, какая именно привязка была установлена на View
, но я все же хочу, чтобы все они были инициализированы.
ОБНОВЛЕНИЕ 2: Отвечая на вопросы относительно того, что я тестирую, и почему. Я не намерен тестировать, что классы, такие как Binding
, BindingBase
и т.д. Работают как ожидалось, я предполагаю, что они работают. Я пытаюсь проверить, что во всех моих файлах XAML я правильно написал привязки. Поскольку привязки являются строгими типизированными вещами, они не проверяются во время компиляции, и по умолчанию они вызывают только ошибки в окне вывода, которые я иногда пропускаю. Поэтому, если мы возьмем мой пример сверху и если мы сделаем опечатку там в bind: {Binding Lengthhh}
, тогда мои тесты уведомят вас о том, что для привязки нет свойства с именем Lengthhh
. Поэтому у меня около 100 файлов XAML, и для каждого XAML у меня есть тест (3-5 строк кода), и после запуска моих тестов я знаю для уверенного, что в моем решении нет ошибок привязки.