Что вы действительно хотите сделать, так это использовать шаблон MVVM , чтобы отделить вашу логику от вашего взгляда. Таким образом, вы можете передать вашу ViewModel объекту, управляющему дочерним окном, вместо самого дочернего окна.
Например, базовая ViewModel для дочернего окна может быть:
public class ChildWindowViewModel: INotifyPropertyChanged {
private string _title;
public string Title{
get { return _title; }
set{if (value != _title){
_title = value;
OnPropertyChanged("Title");
}}
}
private void OnPropertyChanged(string propertyName){
var handle = PropertyChanged;
if (handle != null){
handle(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
Затем вы устанавливаете DataContext для модели представления при создании дочернего окна, например:
//Creating the child window
ChildWindow child = new ChildWindow();
ChildWindowViewModel childViewModel = new ChildWindowViewModel();
child.DataContext = childViewModel;
//do stuff with child...
и подключите заголовок дочерних окон до ViewModel в Xaml следующим образом:
<Namespace:ChildWindow
x:Class="Namespace.MyClass">
<Namespace:ChildWindow.Title>
<TextBlock Width="300" TextTrimming="WordEllipsis" Text="{Binding Path=Title}/>
</Namespace:ChildWindow.Title>
</Namespace:Childwindow>
Тогда, когда вы хотите изменить заголовок, вы можете использовать
childViewModel.Title = "A Very Long Title That Will Be Cut Short In Its Prime";
Установка заголовка в ViewModel вызовет событие PropertyChanged, которое заставит представление Xaml обновить себя с новым установленным значением. Это может показаться ОЧЕНЬ многословным способом ведения дел, но если вы подумаете о том, что это позволяет делать в течение нескольких минут, вы увидите огромные преимущества. Привязка выходит далеко за рамки простых текстов заголовков ...
Надеюсь, что все будет работать как есть, но я делаю это по памяти, так что извините за любые ошибки ...