gpt4 book ai didi

c# - 子用户控件中的 BindingExpression 路径错误

转载 作者:行者123 更新时间:2023-11-30 22:37:29 25 4
gpt4 key购买 nike

我正在开发基于 WPF/PRISM 的应用程序。父 View (usercontrol)中有许多区域, subview (usercontrol)加载在这些区域中。当加载 subview 时,我可以在控制台中看到绑定(bind)错误。尽管绑定(bind)属性是 subview View 模型的一部分,但绑定(bind)解析似乎首先查看父 View 的 View 模型并抛出此错误。该应用程序运行良好,我想知道我是否可以消除这些错误。

我已经成功地在我编写的一个简单应用程序中重新创建了它。

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')

即使按钮在其中正确显示文本“Sample”,也会在控制台中打印出来。我如何避免在控制台中打印这条消息,我的应用程序为加载的每个 subview 打印 25 条以上的错误。

最佳答案

您可能应该将两个 ViewModel 分成两个类。然后让父 ViewModel 引用子 ViewModel。其他一切都可以通过绑定(bind)来完成。

public partial class MainWindow : Window     
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new ParentViewModel();
}
}

public class ParentViewModel
{
public ViewModel()
{
this.Child = new ChildViewModel();
}

public ChildViewModel Child { get; set; }
}

public class ChildViewModel
{
public ViewModel()
{
this.SampleText = "Sample";
}

public string SampleText { get; set; }
}

这个简化的 Xaml 就像:

<Window>     
<Grid x:Name="layout" DataContext="{Binding Child}">
<Button Content="{Binding SampleText}"/>
</Grid>
</Window>

关于c# - 子用户控件中的 BindingExpression 路径错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6511147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com