您真正想要做的是使用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...
并将子窗口标题与 Xaml 中的 ViewModel 挂钩,如下所示:
<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 视图使用新设置的值更新自身。这似乎是一种非常冗长的做事方式,但如果您考虑一下这可以让您做什么几分钟,您会看到一些巨大的好处。绑定超出了简单的标题文本......
希望一切都能按原样工作,但我是凭记忆做的,对任何错误感到抱歉......