【问题标题】:MVVM DataTemplate Binding IssueMVVM DataTemplate 绑定问题
【发布时间】:2011-01-17 21:26:03
【问题描述】:

也许这是感冒药过多的情况,但我似乎无法正确设置此绑定。

这是(简化的)窗口,每个 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 方法是比此处显示的更多功能的命令函数):

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 路径错误: 找不到“内容”属性 '对象' '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>

【问题讨论】:

  • 你能给我们展示一下 DefaultViewViewModel 类吗?
  • 我可以,但你不会从中得到太多... :)
  • 错误实际上可能出现在 DefaultView 中,该错误与绑定到 DeafultViewViewModel 上的属性的内容有关,查看您的代码应该是 DefaultView。
  • 如果您从绑定中完全删除路径,您会收到什么(如果有)错误消息?
  • 那么我不得不说这不仅仅是 nyquil - 应该 起作用。这不像您甚至在路径中指定 Content 属性。通常我会使用 ContentPresenter 而不是 ContentControl,但这不应该有任何区别,而且我不在电脑前进行测试!

标签: wpf mvvm binding


【解决方案1】:

您还没有显示 DefaultViewViewModel 的代码 但我的猜测是您将“内容”定义为字段而不是属性。

为了确保它会修复它,继续通过将 Content 设置为依赖属性来过度杀伤它 希望有帮助

【讨论】:

    【解决方案2】:

    在我正在寻找的上游找到答案。我们所有视图都使用的基本视图控件中存在不正确的绑定(使用常规绑定而没有 TemplatedParent 的 RelativeSource)。

    我不再需要 Nyquil...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-05
      • 2014-02-26
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 2020-12-15
      • 2011-10-12
      相关资源
      最近更新 更多