Silverlight杂项。问题

时间:2011-06-23 13:18:16

标签: c# asp.net silverlight data-binding

我还是Silverlight的新手,想问几个与执行asp.net编程中常见任务有关的问题(顺便说一句,我使用的是Silverlight 4):

  1. 在silverlight中,如何在数据绑定表达式中访问用户控件上的公共属性(不在控件本身上设置datacontext)?例如,让我们使用绑定到某个集合的ItemSource的数据网格,但是您也希望使用数据绑定表达式将数据绑定到由用户控制的属性定义的值,可能使用“Source”属性。在asp.net中,您可以使用<%#expr#>访问任何公共属性/方法。

  2. 在asp.net中,当点击回发控件并引发事件时,您可以通过事件参数访问事件处理程序中的行,并使用FindControl()查找行中的任何控件。 Silverlight中的等效过程是什么? 我知道如何使用DataGridRow.GetRowContainingElement()获取行但是当我使用row.FindName()时,我无法通过其名称在同一行中找到另一个控件,我得到null。我发现帖子做了类似的事情:grid.columns [colIndex]但是这很容易出错,因为你使用索引来引用列然后你必须得到单元格内容来访问你之后的控件(cell.GetCellContent(row)) 。它也不是通用的,上面说明了如何在数据网格中完成它。

  3. 在asp.net中,您可以处理多数控件的OnDataBind事件,在silverlight中是否有相同的东西?

1 个答案:

答案 0 :(得分:0)

  1. 为您的用户控件创建另一个属性,如datacontext,您可以创建自己的custom dependency property

  2. 我会使用SelectionChanged事件而不是鼠标单击。当用户点击该行时,它会很容易地告诉你哪些行是“已添加”。

  3. 此时,不,您在Silverlight中没有DataContext_Changed事件。但是,您可以通过创建自定义依赖项属性来创建自己的属性,该属性将设置数据上下文,并引发您自己的自定义事件。 (不确定为什么他们最初没有实现它,它在WPF世界中)。

  4. 编辑将属性绑定到当前控件,使用以下格式:

    Property="{Binding RelativeSource={RelativeSource Self}, Path=YourCustomProperty}"
    

    例如,这是一个文本框,其text属性绑定到其ID属性:

    <TextBox Height="16" HorizontalAlignment="Left" Margin="97,105,0,0" Name="txtName" 
                 VerticalAlignment="Top" Width="120"
                 Text="{Binding RelativeSource={RelativeSource Self}, Path=Name}"/>