今天做数据验证控件时遇到了个问题,自定义集合控件中的集合项的属性无法进行数据绑定,先列一下关键部分的代码:

验证控件类定义:

public class Validator : Control
{public static readonly DependencyProperty ItemsProperty = DependencyProperty.Register("Items",typeof(ValidatorItemCollection),typeof(Validator),new PropertyMetadata(null));public ValidatorItemCollection Items{get { return (ValidatorItemCollection)base.GetValue(ItemsProperty); }set { base.SetValue(ItemsProperty, value); }}……此处略去很多字
}
验证规则集合类定义:
public class ValidatorItemCollection : ObservableCollection<ValidatorItem>
{
}
验证规则类定义:
public class ValidatorItem : FrameworkElement
{     public bool IsRequired { get; set; }public static readonly DependencyProperty ValidateSenderProperty = DependencyProperty.Register("ValidateSender",typeof(string),typeof(ValidatorItem),new PropertyMetadata(string.Empty));public string ValidateSender{get { return (string)GetValue(ValidatorItem.ValidateSenderProperty); }set{SetValue(ValidateSenderProperty, value);}}
}

XAML代码:

<local:Validator x:Name="validator" AutoValidate="{Binding Path=IsEnabled}"><local:Validator.Items><local:ValidatorItem x:Name="item1" IsRequired="True" 
           ValidateSender="{Binding Path=Name, ElementName=textBox1}"></local:ValidatorItem></local:Validator.Items>
</local:Validator>
 
   在上述XAML中实例化的ValidatorItem的ValidateSender属性楞是不能成功Binding,但是如果在<local:Validator外部实例化,则Binding是成功的。到处找
有关Binding、ObservableCollection的资料,继承的基类也换来换去,还通过反编译的手段找了DomainDataSource类的相关定义来对照,依然不能解决问题。后来
直接在C#代码里绑定,无意中发现item1居然为null,料想原来是visual tree出了问题:定义的ValidatorItem根本没有加载到控件树中,虽然使用Validator.Items
是可以成功访问到的。
 
   于是乎,到处找关于FindName方法的资料,了解到WPF中需要通过RegisterName来注册NameScope,可是silverlight里根本没有类似方法。
 
   最终,在这个帖子里找到了解决办法:http://stackoverflow.com/questions/4571577/silverlight-usercontrol-child-controls-and-findname
 
   这是给出的回答:

It may be difficult to do at this point but the best course of action would probably be to derive your control from ItemsControl instead of UserControl. Then you wouldn't have the problem with name scopes.

I suppose as a workaround you could do a dive into the control with VisualTreeHelper to manually set the tbTest field

后来将Validator类改为继承自ItemsControl,再把Items属性、ItemsProperty干掉,终于Binding成功了。不过这种方法似乎也不是太好,如果我的Validator类中需要定义好几个集合属性咋办?

转载于:https://www.cnblogs.com/sdlfx/archive/2011/03/04/1971129.html

SilverLight自定义集合控件中的集合项数据绑定问题相关推荐

  1. Android 手机卫士--自定义组合控件构件布局结构

    由于设置中心条目中的布局都很类似,所以可以考虑使用自定义组合控件来简化实现 本文地址:http://www.cnblogs.com/wuyudong/p/5909043.html,转载请注明源地址. ...

  2. Android开源库集合(控件)

    RecycleView: RecycleView功能增强 https://github.com/Malinskiy/SuperRecyclerView RecycleView功能增强(拖拽,滑动删除, ...

  3. Leaflet中实现添加比例尺控件与自定义版权控件与链接

    场景 Leaflet快速入门与加载OSM显示地图: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/122290880 上面加载显示 ...

  4. ASP.NET中实现复用代码自定义用户控件UserControl的使用

    场景 ASP.NET中新建Web网站并部署到IIS上(详细图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/107199 ...

  5. VS2010中如何实现自定义MFC控件

    本文简要讲解在VS2010中怎样实现自定义MFC控件的知识,以下是分步骤说明. 一.自定义一个空白控件  1.先创建一个MFC工程 NEW Project-->MFC-->MFC Appl ...

  6. 巧用Delegate在Silverlight多个页面、控件中传递回调方法

    在论坛中看到经常有人碰到如何在SilverLight多个页面或者控件中传替参数或者值的问题,今天抽空通过Delegate机制实现回调实例方法重设动画参数的DEMO,分享给大家.最终结果如图: 在论坛中 ...

  7. android 的a标签,Android开发技巧之在a标签或TextView控件中单击链接弹出Activity(自定义动作)...

    在5.2.1节和5.2.2节介绍了标签以及TextView自动识别的特殊文本(网址.电话号.Email等),这些都可以通过单击来触发不同的动作.虽然这些单击动作已经可以满足大多数需要了,但如果读者想在 ...

  8. [原创]在ObjectDataSource中使用自定义Web控件提供查询参数

    微软的东西就是好用,不过各种细小问题也是不少的. 比如,在ObjectDataSourc中设定选择查询时,如果是带有参数的查询,则会弹出定义参数对话框. 这个对话框里可以选择用于查询的参数来源,如果是 ...

  9. 安卓中自定义view控件代替radiogroup实现颜色渐变效果的写法

    利用自定义控件代替radiogroup,同时实现在使用viewpager进行翻页的时候,实现颜色渐变的效果. 一: 首先创建一个自定义view类继承自View类,所有的控件均用canvas绘制出来(包 ...

  10. Android中通过自定义签名控件实现手写签名

    场景 实现手写签名并获取签名照片 注: 博客: BADAO_LIUMANG_QIZHI的博客_霸道流氓气质_CSDN博客-C#,SpringBoot,架构之路领域博主 关注公众号 霸道的程序猿 获取编 ...

最新文章

  1. java运行在用户态_理解Linux用户态和内核态
  2. adb 输入回车命令_adb adb shell 相关命令
  3. [html] 你有了解HTML5的地理定位吗?怎么使用?
  4. 每日一题丨以下哪个SQL查询的结果是2006-01-01 00:00:00
  5. gensim流式训练word2vec模型,不需要一次性加载完整数据集
  6. 这个深度学习Model Zoo,真的有点像动物园? | 来自一只新加坡蓝精灵
  7. Sitemap Celebration(使用嵌套列表的树形导航)
  8. 在.net 当中如何XML序列化一个Collection
  9. HOOK(钩子,挂钩)
  10. Android 学习资料
  11. Windows11显示网速
  12. 俄亥俄州立大学计算机专业排名,俄亥俄州立大学哥伦布分校计算机科学专业排名第30(2020年USNEWS美国排名)...
  13. Linux服务器常见运维性能测试(2)内存测试mbw、stream
  14. 如何用计算机算出男朋友的身高,【趣味物理】如何用物理方法测出男生的真实身高?...
  15. logo版权注册流程
  16. msf之msfvenom的使用—使用Kali渗透工具生成远控木马
  17. JS实现统一社会信用代码的效验(组织机构代码效验)
  18. java.sql.SQLException: HOUR_OF_DAY: 2 -> 3
  19. 提高iTunes更新速度的DNS
  20. Scala中使用ansj分词库编写spark中文版WordCount

热门文章

  1. jQuery温习篇---强大的JQuery选择器
  2. HDU 3729 I#39;m Telling the Truth(二部图最大匹配+结果输出)
  3. plsql developer 无法登录Oracle
  4. Luogu4712「生物」能量流动
  5. webpack5学习与实战-(一)-webpack的初步认识
  6. background-size失效
  7. c语言输入m行m列的二维数组,编写一个函数,用于计算具有n行和m列的二维数组中指定列的平均值以及数组各行的和的最小值。...
  8. html设置导背景宽度,calc()实现满屏背景定宽内容
  9. js 获取url参数_小总结 - JS获取页面URL信息
  10. 微光app电脑版_有哪些适合学生使用的 App?②