Вы используете шаблон MVVM, не так ли? Не обращайтесь к свойствам вашего элемента управления, а к свойствам модели представления, к которой привязан элемент управления.
У вас должна быть модель вида для RuleTab
; ему необходимо предоставить свойство Filename
, к которому привязан Header
в RuleTab
. Ваш метод просто устанавливает это свойство. (Который, конечно, должен реализовывать уведомление об изменении одним из обычных способов.)
Вообще говоря, каждый раз, когда вы пытаетесь манипулировать элементом управления в представлении кода модели, вы делаете это неправильно. Модели представлений не знают, что существуют элементы управления. Весьма маловероятно, что вы пишете модульные тесты для своих моделей представлений в NUnit (это одна из тех вещей, о которых все говорят, но мало кто делает), но вы по крайней мере должны это делать.
Кроме того, метод, который показывает диалог файла, должен действительно быть методом в представлении, а не моделью представления. Это немного напоминает архитектуру, но общая идея заключается в том, что модель представления вообще не имеет пользовательского интерфейса. Распространенный способ справиться с этим - заставить модель представления реализовать SaveCommand
, который вызывает событие при его выполнении, и открытый метод, который фактически сохраняет файл. Представление прослушивает событие, и когда оно возникает, оно отображает диалоговое окно, получает имя файла и вызывает метод в модели представления, если пользователь не отменил. Это, опять же, дает вам то, для чего вы можете написать модульные тесты без использования пользовательского интерфейса.