我\xe2\x80\x99m 在我的 WPF 应用程序中使用 DataContextProxy 时遇到问题。当我将 DataContextProxy 放置在网格的资源部分时,它永远不会加载。如果我将 DataContextProxy 移出资源部分,一切都会正常工作。
\n\n我\xe2\x80\x99已经对此进行了一段时间的研究,并尝试了多种方法来调试应用程序。
\n\n我\xe2\x80\x99已在我\xe2\x80\x99m尝试使用代理的控件上放置了一个DebugConverter。调试转换器永远不会被调用。
我\xe2\x80\x99ve使用WPFSnoop来查看是否有任何绑定错误。我在 DataContextProxy 上遇到\n以下绑定错误,
\n\nSystem.Windows.Data 错误:3:找不到提供 DataContext 的元素。\nBindingExpression:(无路径);数据项=空;目标元素是\'Proxy\'\n(Name=\'\'); 目标属性是“DataContext”(类型“Object”)
我\xe2\x80\x99在我的DataContextProxy的加载事件上放置了一个断点。\n加载的事件从未被调用,而我\xe2\x80\x99在\nDataContextChanged事件中放置了一个断点,该事件从未被调用。
这是一些示例代码来演示这一点。显然我知道我并不真正需要在 TextBox 上使用 DataContextProxy。
\n\n<Window x:Class="WpfDataContextProxyBug.MainWindow"\n xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"\n xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"\n xmlns:local="clr-namespace:WpfDataContextProxyBug"\n Title="MainWindow" Height="350" Width="525">\n <Window.Resources>\n <local:DebugConverter x:Key="DebugConverter"/>\n </Window.Resources>\n <Grid>\n <Grid.Resources>\n <local:Proxy x:Key="Proxy" DataContext="{Binding}" />\n </Grid.Resources>\n\n <TextBox DataContext="{Binding Path=Name, Source={StaticResource Proxy}, Converter={StaticResource DebugConverter}}"/>\n </Grid>\n</Window>\nRun Code Online (Sandbox Code Playgroud)\n\nDataContextProxy 类
\n\npublic class Proxy : FrameworkElement\n{\n public Proxy()\n {\n Loaded += DataContextProxy_Loaded;\n DataContextChanged += Proxy_DataContextChanged;\n }\n\n …Run Code Online (Sandbox Code Playgroud)