2011-12-08 6 views
1

私はnew-ishからC#およびwpfです。私はクラスの外からタイトルが設定されるChildWindowを持っています。私はタイトルが長すぎると最後に省略記号で短縮する必要があります。私は(コードが短縮される)これを行うことによって達成:私はそれがより理にかなっていることと思うのでChildWindowのタイトルのスタイル

<Namespace:ChildWindow 
     x:Class="Namespace.MyClass"> 
    <Namespace:ChildWindow.Title> 
     <TextBlock x:Name="_titleBlock" Width="300" TextTrimming="WordEllipsis"/> 
    </Namespace:ChildWindow.Title> 
</Namespace:Childwindow> 

しかし、私はこのクラスの呼び出し元がChildWindow.Title = "Something long"ではなく、ChildWindow._titleBlock = "Something long"を設定できるようにしたいと思います。それは何とかイベントを通じてこれを行うことが可能ですか?

答えて

0

あなたが本当にやりたいことは、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"; 

使用することができます。これは非常に長い風にされた方法のように見えるかもしれませんが、これで何ができるのか考えてみると、いくつかの大きなメリットがあります。拘束力は単純なタイトルのテキストを超えて行きます...

うまくいけば、それはすべてのように動作しますが、私はメモリからそれをやっていますので、間違いをおかけして申し訳ありません...

関連する問題