おそらくこれはあまりにも多くの冷たい薬の場合ですが、私はこのバインディングを正しく行うことができません。ここ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>
私たちはDefaultViewViewModelクラスを表示できますか? – Notter
私はすることができますが、多くを得ることはありません:) :) –
エラーは実際にDefaultViewにある可能性があります、エラーはDeafultViewViewModelのプロパティにバインドする何かに関連して、あなたのコードを見てDefaultViewする必要があります。 – ColinE