あなたが本当にやりたいことは、MVVMパターンを使用して、ロジックをビューから分割することです。そうすれば、子ウィンドウの代わりに子ウィンドウを操作するものにViewModelを渡すことができます。例えば
、子ウィンドウのための基本的なViewModelには、次のようになります。
//Creating the child window
ChildWindow child = new ChildWindow();
ChildWindowViewModel childViewModel = new ChildWindowViewModel();
child.DataContext = childViewModel;
//do stuff with child...
フック:あなたはこのような子ウィンドウを作成するときに
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;
}
あなたは、その後のviewmodelにDataContextのセット子ウィンドウのタイトルは次のように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>
あなたがタイトルを変更したい場合、あなたはXAMLビューが新しく設定された値を使用して自身を更新するようになりますPropertyChangedイベントをトリガーするのViewModelにタイトルを設定
childViewModel.Title = "A Very Long Title That Will Be Cut Short In Its Prime";
使用することができます。これは非常に長い風にされた方法のように見えるかもしれませんが、これで何ができるのか考えてみると、いくつかの大きなメリットがあります。拘束力は単純なタイトルのテキストを超えて行きます...
うまくいけば、それはすべてのように動作しますが、私はメモリからそれをやっていますので、間違いをおかけして申し訳ありません...