也许这是一个过多的感冒药的情况,但我似乎无法让这个Binding正确。
这是(简化)窗口,每个ViewModel类型都有一个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>
以下是一些MainViewModel(为简洁起见,实际的ShowABCView方法是Command函数,其功能超出此处所示):
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路径错误: 未找到“内容”属性 'object''DefaultViewViewModel'
我知道我在这里遗漏了一些明显的东西,但是Nyquil和朋友背叛了我......
* 编辑 - 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()
{
}
}
默认视图:
<UserControl ...>
<TextBlock Text="Some Hard Coded Text Formatted To My Liking" />
</UserControl>
答案 0 :(得分:1)
你还没有显示DefaultViewViewModel的代码 但我的猜测是你将“内容”定义为一个字段,而不是一个属性。
确保它将修复它,通过使Content成为依赖属性来继续进行过度杀伤 希望有所帮助
答案 1 :(得分:0)
在我正在寻找的上游找到答案。在我们的所有视图使用的基本View控件中存在不正确的绑定(使用常规绑定而没有TemplatedParent的RelativeSource)。
对我来说不再是Nyquil ......