代码之家  ›  专栏  ›  技术社区  ›  Konamiman

在telerik radtreeview下使用数据绑定到元素时出现了非常奇怪的错误

  •  1
  • Konamiman  · 技术社区  · 16 年前

    我将以下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 物体。这个 模块 班 具有名为的属性 Submodules , 其中包括 更多的模块。
    • ModuleInfoUserControl 是习俗 用于显示模块的控制 信息。 IsReadOnly 是一个 在上声明的依赖项属性 控制。
    • ctrlIsReadOnly 是隐藏的文本框 在主用户的其他地方定义 控制。它用来做一束 控件的可编辑或只读。

    问题: 绑定到 唯读 元素在 模块输入输出器控制 不起作用。这个 唯读 它的属性始终处于其默认状态,即使 crlIsReadOnly 变化。

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


    好的,到这里为止,我已经贴了一份我寄给Telerik的支持票的精确副本,希望他们能帮助我。我必须说,回复速度很快,效率也尽可能高:他们说他们不能复制这个bug,并且给我发送了一个小的测试项目来执行这段有问题的代码。测试项目在我的机器上显示了这个bug,但在Telerik上工作。

    这就是真正奇怪的部分。我已经在我的个人网站上发布了Telerik的示例项目。链接如下:

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

    其思想是,当按下“toggleisreadonly”按钮时,“root”文本框应变为只读。但同样,它在Telerik的机器上工作,但在我的机器上不工作!所以应用程序代码本身是非常好的。

    我认为这可能是我机器的Silverlight运行时的一个问题,我已经测试了其他一些软件,包括:西班牙语Windows 7 32和64位、西班牙语Windows XP、英语Windows Server 2008,甚至在我妻子的装有日语Windows XP的计算机上。 在所有这些方面,它都不能像预期的那样工作。 .

    那么,这里发生了什么?我完全被卡住了。

    顺便说一下,我使用的Silverlight运行时是3.0.50106.0版。

    更新: 我也上传了测试项目的源代码。以下是网址:

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

    2 回复  |  直到 16 年前
        1
  •  1
  •   Henrik Söderlund    16 年前

    我已经试过这个测试项目了,但是我不能让它工作。我试过将线程文化改为“en-us”,但这没有帮助。似乎项控制HierarchicalDataTemplate无法绑定到元素的属性 外部 数据模板。我认为你应该回到Telerik,再问他们是否100%确信这在他们的机器上能正常工作。如果是这样,那就是一种非常奇怪的虫子。

    [编辑]
    我找到了更多的信息,请参阅下面的链接。看起来这是一个普通的Silverlight问题。但奇怪的是,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

        2
  •  0
  •   Konamiman    16 年前

    我找到了一种可行的替代方法。而不是定义 ctrlIsReadOnly 作为主用户控制树的一部分,我将其定义为静态资源:

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

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

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

    然后我通过以下方式从代码访问ctrlisreadonly: ((TextBox)this.Resources["ctrlIsReadOnly"])