在Telerik RadTreeView下使用数据绑定到元素时非常奇怪的错误

时间:2010-02-19 08:46:31

标签: silverlight silverlight-3.0 telerik

我将以下XAML代码作为自定义控件的一部分:

<telerik:RadTreeView x:Name="treeModules"> 
    <telerik:RadTreeView.ItemTemplate> 
        <core:HierarchicalDataTemplate ItemsSource="{Binding Submodules}"> 
            <local:ModuleInfoUserControl IsReadOnly="{Binding ElementName=ctrlIsReadOnly, Path=IsReadOnly}"/> 
        </core:HierarchicalDataTemplate> 
    </telerik:RadTreeView.ItemTemplate> 
</telerik:RadTreeView>

其中:

  • ItemsSource属性 treeModules由代码设置为列表 Module个对象。 Module课程 有一个名为Submodules的属性, 它包含一个集合 更多模块。
  • ModuleInfoUserControl是一种习惯 用于显示模块的控件 信息。 IsReadOnly是一个 在...上声明的依赖属性 控制。
  • ctrlIsReadOnly是一个隐藏的TextBox 在主用户的其他地方定义 控制。它被用来制作一堆 控制可编辑或只读。

问题:绑定到ctrlIsReadOnly中的ModuleInfoUserControl元素不起作用。即使IsReadOnly的相应属性发生更改,它的crlIsReadOnly属性也始终处于默认状态。

但是,如果我将RadTreeView更改为标准的Silverlight TreeView,并将HierarchicalDataTemplate更改为标准的Silverlight版本,它将按预期工作。


好的,到目前为止,我已经粘贴了我发给Telerik的支持票的确切副本,希望他们可以帮助我。我必须说答复是快速而有效的:他们告诉我他们无法重现这个错误,并向我发送了一个小的测试项目来运行有问题的代码。测试项目显示我的机器上的错误,但适用于Telerik的。

这是非常奇怪的部分。我在个人网站上发布了Telerik的示例项目。这是链接:

http://www.konamiman.com/TelerikTest/TestPage.html

这个想法是当按下“ToggleIsReadOnly”按钮时,“Root”TextBox应该变为只读。但同样,它适用于Telerik的机器,但不适用于我的机器!所以应用程序代码本身显然没问题。

认为它可能是我的机器的Silverlight运行时出现问题,我测试了其他一些,包括:西班牙语Windows 7 32和64位,西班牙语Windows XP,英语Windows Server 2008,甚至在我妻子的计算机上日本的Windows XP。 在所有这些方面,它无法按预期工作

那么,这里发生了什么?我完全陷入困境。

顺便说一下,我使用的Silverlight Runtime版本是3.0.50106.0。

更新:我也上传了测试项目的源代码。这是URL:

http://www.konamiman.com/TelerikTest/TreeViewTest.zip

2 个答案:

答案 0 :(得分:1)

我现在已经尝试了测试项目,但我无法让它工作。我尝试将线程文化更改为“en-US”,但这没有用。似乎项控件HierarchicalDataTemplate无法绑定到该datatemplate的元素外部上的属性。我想你应该回到Telerik并再次询问他们是否100%确定它在他们的机器上按预期工作。如果确实如此,这是一个非常奇怪的错误。

<强> [编辑]
我找到了更多信息,请参阅下面的链接。看起来这是一个普遍的银光问题。但是,Telerik家伙声称它可以在他的机器上运行,这仍然很奇怪 http://forums.silverlight.net/forums/p/108804/267789.aspx

这与Telerik GridView组件有类似之处:
http://www.telerik.com/community/forums/silverlight/gridview/elementname-binding-inside-of-celltemplate.aspx

答案 1 :(得分:0)

我找到了一种似乎工作正常的替代方法。我没有将ctrlIsReadOnly定义为主用户控制树的一部分,而是将其定义为静态资源:

<UserControl.Resources>
    <TextBox x:Key="ctrlIsReadOnly" IsEnabled="True" IsReadOnly="False" Visibility="Collapsed" />
</UserControl.Resources>

然后我只需稍微更改ModuleInfoUserControl上的绑定声明:

<local:ModuleInfoUserControl IsReadOnly="{Binding Source={StaticResource ctrlIsReadOnly}, Path=IsReadOnly}"/>

然后我以这种方式从代码访问ctrlIsReadOnly:((TextBox)this.Resources["ctrlIsReadOnly"])