Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ResourceDictionary中DataTemplate中的CommandBinding,未正确分配处理程序_C#_.net_Wpf_Xaml_Resourcedictionary - Fatal编程技术网

C# ResourceDictionary中DataTemplate中的CommandBinding,未正确分配处理程序

C# ResourceDictionary中DataTemplate中的CommandBinding,未正确分配处理程序,c#,.net,wpf,xaml,resourcedictionary,C#,.net,Wpf,Xaml,Resourcedictionary,我有一个资源字典,其中包含一个数据模板。在此DataTemplate的资源中,我声明了一个CommandBindingCollection。我的ResourceDictionary有一个代码隐藏文件,我在其中声明Executed/CanExecute的处理程序 我遇到的问题是,当我从ResourceDictionary检索我的CommandBindingCollection时,执行的/CanExecute处理程序没有被分配。使用调试器,我可以看到处理程序为null。这是为什么?我该如何修复它 R

我有一个
资源字典
,其中包含一个
数据模板
。在此DataTemplate的资源中,我声明了一个
CommandBindingCollection
。我的ResourceDictionary有一个代码隐藏文件,我在其中声明Executed/CanExecute的处理程序

我遇到的问题是,当我从
ResourceDictionary
检索我的
CommandBindingCollection
时,执行的/CanExecute处理程序没有被分配。使用调试器,我可以看到处理程序为null。这是为什么?我该如何修复它

ResourceDictionary XAML:


ResourceDictionary codebehind:

公共部分类MyResourceDictionary:ResourceDictionary
{
公共MyResourceDictionary()
{ 
初始化组件();
} 
私有void testExecuted(对象发送方,ExecutedRoutedEventArgs e)
{
}
私有void testCanExecute(对象发送方,CanExecuteRouteEventArgs e)
{
}
}
更新

我将其用于AvalonDock,它使用
DataTemplateSelector
应用DataTemplate

以下是我加载模板的方式:

public override DataTemplate SelectTemplate(对象项,依赖对象容器)
{
如果(项为TestViewModel)
{
ResourceDictionary res=Application.LoadComponent(新Uri(“/MyResourceDictionary.xaml”,UriKind.Relative))作为ResourceDictionary;
DataTemplate template=res[“template”]作为DataTemplate;
如果(模板!=null)
{
CommandBindingCollection命令绑定=
资源[“CommandBindings”]作为CommandBindingCollection;
if(commandBindings!=null)
{
foreach(commandBindings中的var绑定)
{
//将commandbinding添加到容器控件
//在这里,使用调试器,我可以看到commandbinding的处理程序
//始终为空(我只能使用调试器看到的私有变量)
}
}
返回模板;
}
}
返回基地。选择模板(项目、容器);
}
如果我将
CommandBindingCollection
直接移动到
ResourceDictionary
中,并通过以下方式访问它:

CommandBindingCollection commandBindings = 
            res["CommandBindings"] as CommandBindingCollection;

然后正确设置处理程序。我想知道,当我在DataTemplate的资源中声明事件处理程序时,为什么它不能设置它的委托。

我的问题与.NET framework中的一个bug有关,它似乎在4.5中修复了

在4.0上有一个解决此问题的热修复程序:


在我的例子中,应用修补程序解决了这个问题。我的猜测是,在CommandBindingCollection XAML解析器中的某个地方,异常被静默处理。

我的问题与.NET framework中的一个bug有关,它似乎在4.5中得到了修复

在4.0上有一个解决此问题的热修复程序:


在我的例子中,应用修补程序解决了这个问题。我的猜测是,CommandBindingCollection XAML解析器中的某个地方会以静默方式处理异常。

尝试看看这个类似的问题:@Johnny Yeah已经看过了,但解决方案不适用于我的特定情况(我的CommandBindingCollection位于Datatemplate的资源中,Datatemplate本身位于ResourceDictionary中)您从资源字典中检索命令绑定是什么意思。您将命令绑定分配给什么控件?能否向我们展示TestCommands的源代码?数据模板是如何分配的?@Per使用DataTemplateSelector代码更新了问题。请看一看类似的问题:@Johnny Yeah已经有一个看看它,但解决方案不适用于我的特定情况(我的CommandBindingCollection在Datatemplate的资源中,Datatemplate本身在ResourceDictionary中)您从资源字典中检索命令绑定是什么意思?您将命令绑定分配给什么控件?能否向我们展示TestCommands的源代码?如何分配数据模板?@Per使用DataTemplateSelector代码更新了问题