2011-01-17 32 views
1

おそらくこれはあまりにも多くの冷たい薬の場合ですが、私はこのバインディングを正しく行うことができません。ここMVVM DataTemplateバインディングの問題

<Window ...> 
    <Window.Resources> 
     <DataTemplate DataType="{x:Type local:DefaultViewViewModel"> 
      <local:DefaultView /> 
     </DataTemplate> 

     <DataTemplate DataType="{x:Type other:AnotherViewModel"> 
      <other:AnotherView /> 
     </DataTemplate> 
    </Window.Resources> 

    <Grid> 
     <ContentControl Content="{Binding CurrentViewModel}" /> 
    </Grid> 
</Window> 

(実際ShowABCView方法はコマンド機能MainViewModelの一部であるている:ちょうど関連したビューを表示する必要があり、各ビューモデルタイプのためのDataTemplateは、とここ

は、(簡略化)ウィンドウでありますそれは)簡潔にするために、ここで示されている以上のことを行う:

class MainViewModel : ViewModelBase 
{ 
    private Stack<ViewModelBase> mContentViewStack; 

    public MainViewModel() 
    { 
     mContentViewStack = new Stack<ViewModelBase>(); 
     ShowDefaultView(); 
    } 

    public ViewModelBase CurrentViewModel 
    { 
     get { return mContentViewStack.Peek(); } 
    } 

    private ShowDefaultView() 
    { 
     DefaultViewViewModel viewModel = new DefaultViewViewModel(); 
     mContentViewStack.Push(viewModel); 
     NotifyPropertyChanged("CurrentViewModel"); 
    } 

    private ShowAnotherView() 
    { 
     AnotherViewModel viewModel = new AnotherViewModel(); 
     mContentViewStack.Push(viewModel); 
     NotifyPropertyChanged("CurrentViewModel"); 
    } 
} 

そして、メインウィンドウのスタートアップコード:

public MainWindow() 
{ 
    this.DataContext = new MainViewModel(); 
} 

私はこれを実行すると、私は私がここで何かを明らかに欠けている知っているが、Nyquilや友人が私を裏切るエラー

System.Windows.Data.Error: 40: BindingExpression path error: 'Content' property not found on 'object' 'DefaultViewViewModel'

を取得...

* EDIT - DefaultViewViewModelと[既定*

DefaultViewViewModel:

// ViewModelBase is basically just a wrapper for INotifyPropertyChanged, 
// plus some other common-to-my-project properties 
// (NOT INCLUDING A Content PROPERTY) 
class DefaultViewViewModel : ViewModelBase 
{ 
    public DefaultViewViewModel() : base() 
    { 
    } 
} 

[既定:

<UserControl ...> 
    <TextBlock Text="Some Hard Coded Text Formatted To My Liking" /> 
</UserControl> 
+0

私たちはDefaultViewViewModelクラスを表示できますか? – Notter

+0

私はすることができますが、多くを得ることはありません:) :) –

+0

エラーは実際にDefaultViewにある可能性があります、エラーはDeafultViewViewModelのプロパティにバインドする何かに関連して、あなたのコードを見てDefaultViewする必要があります。 – ColinE

答えて

0

は上流私が探していたところから答えを見つけることができます依存関係プロパティ 希望を作ることによって、それをやり過ぎました。間違ったバインディング(TemplatedParentのRelativeSourceを使用せずに通常のバインディングを使用)が、すべてのビューで使用されるベースのViewコントロールにありました。

私のためにもう一度Nyquil ...

1

さてあなたは まだDefaultViewViewModelためのコードを示していないが、私の推測では、あなたはフィールドとしてではなくプロパティとして「コンテンツ」に定義されています。

、それはそれを修正することを確認して先に行くと、コンテンツに

関連する問題