【问题标题】:MVVM - Binding Expression errors when createing a View in XAML with a ViewModel DataTemplateMVVM - 使用 ViewModel DataTemplate 在 XAML 中创建视图时出现绑定表达式错误
【发布时间】:2013-04-19 17:13:35
【问题描述】:

这是一个 WPF 应用程序。

背景:

我基本上有一个向导应用程序。通过提供 ViewModel 列表来初始化向导。这些 ViewModel 将根据我的 XAML 中的一些 DataTemplate 创建适当的视图。

在向导中单击下一个或上一个时,将设置适当的 ViewModel 并根据 DataTemplate 加载视图。

这很好用。

问题:

当我处于临时状态时...意味着正在加载新的 viewModel,似乎有一小段时间仍在引用前一个 VIEW。因此,我收到一堆 BindingExpression 错误,它说它找不到一堆实际存在于 PREVIOUS viewModel 上的绑定。

摘要:我正在加载基于 DataTemplate 的新视图。最初加载该视图时,它似乎与实际的 viewModel 不同步。因此,我得到了一堆绑定表达式错误。

两个问题:

  1. 关于如何解决此问题的任何想法?
  2. 出现这些 BindingExpression 错误有什么危险吗?

    <wiz:WizardContent.Resources>
        <!--DataTemplates for defining views for this Wizard-->
        <DataTemplate DataType="{x:Type viewModel:Step1ViewModel}">
            <view:Step1 DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}, Path=DataContext.CurrentPageVM}"/>
        </DataTemplate>
        <DataTemplate DataType="{x:Type viewModel:Step2ViewModel}">
            <view:Step2 DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}, Path=DataContext.CurrentPageVM}"/>
        </DataTemplate>
        <DataTemplate DataType="{x:Type viewModel:Step3ViewModel}">
            <view:Step3 DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}, Path=DataContext.CurrentPageVM}"/>
        </DataTemplate>
    </wiz:WizardContent.Resources>
    <ContentControl Content="{Binding Path=CurrentPageVM}"/>
    

【问题讨论】:

  • 需要查看视图模型代码,您是否在视图模型属性上实现 inotifypropertychanged?
  • 谢谢,今晚我回家后会补充的

标签: wpf xaml mvvm binding viewmodel


【解决方案1】:

BindingExpression 错误并不危险,据我所知,它只会让您的应用程序变慢一点。

关于您的代码,我不确定您是否需要在每个视图中定义 DataContext,因为它会自动获取 DataType 检测到的 DataContext。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 2011-01-31
    • 1970-01-01
    • 2013-01-05
    • 2010-12-07
    • 2017-08-03
    相关资源
    最近更新 更多