Возможно, это случай слишком холодной медицины, но я просто не могу получить эту привязку правильно.MVVM DataTemplate Binding Issue
Здесь (упрощенно) Окно с более DataTemplate для каждого типа ViewModel, который должен просто показать соответствующий вид:
<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>
Вот некоторые из MainViewModel (фактические методы ShowABCView являются функции команд что делать больше, чем показано здесь, для краткости):
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");
}
}
и стартовый код MainWindow:
public MainWindow()
{
this.DataContext = new MainViewModel();
}
Когда я запускаю это, я получаю ошибку
System.Windows.Data.Error: 40: BindingExpression path error: 'Content' property not found on 'object' 'DefaultViewViewModel'
Я знаю, что я что-то очевидное здесь отсутствует, но Nyquil и друзья предают меня ...
* EDIT - DefaultViewViewModel и DefaultView *
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()
{
}
}
DefaultView:
<UserControl ...>
<TextBlock Text="Some Hard Coded Text Formatted To My Liking" />
</UserControl>
Вы можете показать нам класс DefaultViewViewModel? – Notter
Я могу, но вы не получите многого из этого ... :) –
Ошибка действительно может быть в DefaultView, ошибка связана с чем-то, что привязывается к свойству в DeafultViewViewModel, который, глядя на ваш код, должен быть DefaultView. – ColinE