【Silverlight】解决DataTemplate绑定附加属性

本文 Silverlight 版本:4.0。
首先定义数据类型,此文始终使用此定义类型。
public class SimpleData : ViewModelBase { private string _text; private int _column, _row; public string Text { get { return _text; } set { _text = value; _disibledevent=> 前台代码:

后台代码:
public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); this.DataContext = new SimpleData[] { new SimpleData{ Text = "111111", Column = 0, Row = 0 }, new SimpleData{ Text = "222222", Column = 1, Row = 1 }, new SimpleData{ Text = "333333", Column = 0, Row = 2 }, }; } }
可以看出这段代码的本意是通过绑定的方式设置,在 ItemsControl 里面显示 3 个 TextBox,同时指定了相应在 Grid 的行和列。
但是,你懂的!
这样的代码肯定是不能正确运行。特别是在Silverlight。
如果这是在 WPF 环境,很庆幸你还可以用 ItemContainerStyle 搞定:

只可惜这是在 Silverlight 环境。我们只能够想别的办法了。
为什么不可以?拿出 Silverlight Spy 或者 Snoop 查看相应的 VisualTree。可以看到在 TextBox 外面还套了一个
UpUp.Up 应该如何填写?实际上 UpUp.Up 属性有具体的语法格式:
UpUp.Up="Type.Property[,Type.Property ...][;Level[;Move|Copy]]"
其中
Type.Property 是需要提升绑定关系的属性名称,可以用逗号把多个属性名称隔开。
Level 是整数,表示需要提升的层次。在 VisualTree 中向上一层为一个层次。
Move|Copy 是枚举类型,表示提升之后保留原来的绑定关系。
例如:delay:UpUp.Up="Grid.Row,Grid.Column;1;Copy"
有了 UpUp 之后,对于类似的绑定问题可以轻而易举的完成了!
本文完整代码在此下载:http://files.cnblogs.com/Aimeast/SLTestValueBindingInItemTemplate.zip
Tags: 

延伸阅读

最新评论

发表评论