2012-03-23 21 views
0

私は年齢を問わずこれをやっています。選択した項目のタブデータが失われましたMVVM

私は次の階層のリボンウィンドウを持っている:

  • メインウィンドウ
    • MainContentの(タブコントロール)
      • TabContainerViewModel
        • ViewModelBase

ビューモデルベースには、タブ型ViewModelBaseのObservableCollectionがあります。タブコントロール自体は、適切なビューモデルを表示して、これらに拘束されます。私は2つの問題がありますが、私は "NotepadView"(タイプviewmodelbaseの)を何度も(1つのビューで多くのビューモデルを)複製する必要があります。

分ごとに、対応するビューモデルで4つのビュー(NotePadViewModelx、xは1〜4)があります。これは、各ビューがタブごとに同じテキストを持つためです。今私はタブごとに個別のビューを持っています。

タブ1に入力してタブ2に切り替えると、クリックするとタブ1に入力した内容が失われます。

誰かが私にこれらの問題の解決策を教えてもらえますか?

  • タブが事前に

感謝を変更したときに情報を維持するViewModelに

  • の複数のインスタンスの一つNotepadView。

  • +0

    これは、notepadviewコントロールの同じインスタンスのみを使用しているということですか? – daryal

    +0

    私のソリューションエクスプローラでは、私は1つのnotepadviewと1つのnotepadviewが欲しいですが、私はそれらの多くのインスタンスをタブコントロールに持つことができます。すべてのnotepadviewにはテキストボックスがあります。理論的には、タブアイテムのコンテンツをテンプレートとしてテキストボックスにすることができますが、できるだけ多くのMVVMを学習しようとしています。 – LukeHennerley

    +0

    さらに詳しい要約として、私のテキストボックスは、プロパティの変更された属性トリガーが変更されたビューモデルベースのTextプロパティにバインドされています。これは問題ありません。「新しいメモ帳」ボタンをクリックすると、Textプロパティは何も設定されません。 – LukeHennerley

    答えて

    1

    私はViewModelBaseを追加するとき、私はその後、ViewModelBaseにヘッダーとテキストのプロパティを移動し、タブとして私はViewModelBaseのためにDataTemplateを使用しました。私はテキストボックスだけでNotePadViewModelsを使用していました。問題の小さなヒントのレイチェルに

    <DataTemplate DataType="{x:Type ui:NotepadViewModel}"> 
         <ui:NotePadView DataContext="{Binding}"/> 
        </DataTemplate> 
        <DataTemplate DataType="{x:Type ui:NotepadViewModel2}"> 
         <ui:NotePadView2 DataContext="{Binding}"/> 
        </DataTemplate> 
        <DataTemplate DataType="{x:Type ui:NotepadViewModel3}"> 
         <ui:NotePadView3 DataContext="{Binding}"/> 
        </DataTemplate> 
    

    ありがとう:これを使用するaposeとして

    <DataTemplate DataType="{x:Type ui:ViewModelBase}"> 
        <TextBox Text="{Binding Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></TextBox> 
        </DataTemplate> 
    

    。基本的には以前の方法では、実際にデータ型内に何もバインドされていなかったので、リソースとして保持する理由はありませんでした。データ・テンプレート内にデフォルトのテキスト・ボックスを追加することにより、テキスト・ボックスを必要としない他のビューを追加できる一方で、必要な数のメモ帳を追加できます。

    0

    デフォルトでは、WPFは可能であればTabItemを再利用し、その後ろにDataContextを置き換えます。 DataContextのプロパティにバインドされていないプロパティは、タブを切り替えるとリセットされます。

    だからあなたの変更が持続し得るために、あなたは例えばDataContext

    でそれらを格納する必要があり、

    <TabControl ItemsSource="{Binding MyNotepadVMCollection}"> 
        <TabControl.ItemTemplate> 
         <DataTemplate> 
          <TextBox Text="{Binding SomePropertyOnViewModel}" /> 
         </DataTemplate> 
        </TabControl.ItemTemplate> 
    </TabControl> 
    
    +0

    私は自分のタブコントロールのスタイルを使用して、ビューテンプレートと適切なビューのリストにアイテムテンプレートをバインドしています。私のタブのために別のビューが必要なのでしょうか?たとえば、これはwouldntのテキストボックスです。 – LukeHennerley

    +0

    @LukeHennerley私は返信しようとしていましたが、既にそれを整理しているのを見てください:) – Rachel

    関連する問題