2016-09-18 2 views
0

私は、複数のシェルでプリズムを使用するソリューションを持っています。私はほとんどそれを働かせてきましたが、私に悩まされていることが1つあります。さて、2つですが、どちらもメインウィンドウの属性なので、答えは同じです。ユーザーコントロールからウィンドウのタイトルを変更する

シェルにユーザーコントロールを挿入するときに、ウィンドウのタイトルを変更する必要があります。私は私が行うために必要なもの(ところで、幻想pluralsightモジュールのあなたのブライアンLagunasありがとう)

ViewModelLocator、IRegionManagerを、使用してブートストラップによるナビゲーションのすべてを実行している

は、シェルのタイトルを変更で新しいビューがコンテンツ領域に注入されたときのウィンドウ。ビューはすべてUserControlsとして作成されます。

私は現在、私のshell.xamlコードでのタイトルのための標準バインディングを持って

Title="{Binding Title}" 

と私はシェルの初期化時に、それを設定するために、私のShellViewModel.csにいくつかの非常に単純なコードを使用しています。

public string ViewTitle = "<window title here>"; 
    public string Title 
    { 
     get { return ViewTitle; } 
     set { if (ViewTitle != null) SetProperty(ref ViewTitle, value); } 
    } 
+0

質問がありますか? – UnholySheep

+0

私は私の質問をきちんと詳述したと思った。ビューがコンテンツ領域に注入されたときのウィンドウのタイトルを変更するにはどうすればよいですか? 現在、コード化されている方法は静的です。 –

+0

私はこの文脈で "静的"というあなたの定義を理解していません。あなたはタイトルのためのバインディングを持っているので、私はあなたが変数に新しい値を割り当てようとしたと仮定し、それはうまくいきませんでしたか? – UnholySheep

答えて

0

私は自分のレイアウトとは異なる方向に行きます。これはあまりにも問題が多いことを証明しており、機能よりもスタイルの選択です。

1

これは古い質問ですが、私は現在同じ状況で作業しています。私はPrismのMVVMには比較的新しいですが、答えを探している間に他の誰かがこの問題に遭遇したときにこの問題をどのように解決したかを記録したかったのです。

  1. BindableBaseから継承する新しいクラスを作成し、タイトルプロパティを追加:あなたのメインウィンドウで

    public class BindableBaseExtended : BindableBase 
    { 
        private string _mainTitle; 
        public string MainTitle 
        { 
         get { return _mainTitle; } 
         set { _mainTitle = value; } 
        } 
    } 
    
  2. (またはあなたがシェルとして使用しているものは何でも)、あなたのContentControlに名前を付け我々はタイトルを設定する場所の名前とパスによるコンテンツ制御要素へのあなたのメインウィンドウ(シェル)バインドで

    <ContentControl Grid.Row="1" x:Name="mainContent" prism:RegionManager.RegionName="... 
    
  3. タイトルの変更を供給されます、あなたのメインのコンテンツパネルについては
    <TextBlock HorizontalAlignment="Center" 
          VerticalAlignment="Center" 
          FontSize="22" 
          Text="{Binding Content.DataContext.MainTitle, ElementName=mainContent}" /> 
    
  4. 、彼らはBindableBaseExtended(以前BindableBaseを継承)を継承します:クラスのインスタンス化に

    public class ViewBViewModel : BindableBaseExtended 
    
  5. は(誰かがそこにナビゲート)あなたの設定しましたMainTitleプロパティ:

    public ViewBViewModel(IEventAggregator eventAggregator) 
    { 
        _eventAggregator = eventAggregator; 
        MainTitle = "View B"; 
        eventAggregator.GetEvent<UpdateTitleEvent>().Subscribe(Updated); 
    } 
    

あなたの財産意志なしあなたのユーザーコントロールをあなたのシェルにフィードし、ナビゲーション時に変更されます。これを改善する方法のフィードバックを聞いて欲しいですか、これが既により正確な方法で実装されているところを教えてください。しかし、今は他の誰かが詰まっている場合にこのバージョンを共有したいと思っていました。

+0

質問ネストが1つのレベルよりも深くなると、私のシナリオでは、ネストされた領域を表示する領域があります。上のビューモデルは内側のものについて何も知らないのに対し、内側のものからメインウィンドウのタイトルを変更したいのです。私はアグリゲーターが唯一の方法だと思います。 – Shimmy

関連する問題