我正在开发基于WPF/PRISM的应用程序。父视图(usercontrol)中包含许多区域,子视图(用户控件)在这些区域中加载。当子视图被加载时,我可以看到在控制台中打印的绑定错误。尽管绑定属性是子视图视图模型的一部分,但绑定解析似乎首先查看父视图的视图模型并引发此错误。该应用程序工作正常,我想知道我是否可以摆脱这些错误。child usercontrols中的BindingExpression路径错误
我设法在我写的一个简单的应用程序中重新创建了这个。
C#
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
this.Loaded += (o, e) => { this.layout.DataContext = new ViewModel(); };
}
}
public class ViewModel
{
public ViewModel()
{
this.SampleText = "Sample";
}
public string SampleText { get; set; }
}
XAML
<Window x:Class="DataBindingResolution.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase"
Title="MainWindow" Height="350" Width="525">
<Grid x:Name="layout">
<Grid.Resources>
<TextBlock x:Key="test" Text="{Binding SampleText}"/>
</Grid.Resources>
<Button Content="{StaticResource test}"/>
</Grid>
</Window>
当你运行这个示例中,您可以看到:
System.Windows.Data Error: 39 : BindingExpression path error: 'SampleText' property not found on 'object' ''MainWindow' (Name='')'. BindingExpression:Path=SampleText; DataItem='MainWindow' (Name=''); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')
得到印在控制台即使按钮正确显示文本“样品“。如何从控制台中打印出此消息,我的应用程序为每个加载的子视图打印25个以上的错误。
家长不知道孩子被加载的所有棱镜区域的视图被注入。 – anivas
在这种情况下,每个子视图都是独立的。创建视图的过程应该将ViewModel注入到子视图中。如果您使用Unity来解析视图和视图模型,您可以一步完成它。见http://www.wintellect.com/CS/blogs/sloscialo/archive/2011/05/19/yet-another-way-to-attach-viewmodels-to-views.aspx – SergioL
太棒了!它的工作从来没有想到它与视图模型解决方案有关。谢谢。 – anivas