绑定自己,而不是它的属性之一

时间:2009-09-15 16:18:23

标签: asp.net data-binding

使用Asp.net的Bind()方法,如何绑定到对象本身,而不是其中一个属性?

5 个答案:

答案 0 :(得分:2)

我认为Ryan在这里的意思就像你必须要有这样的对象

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

如果将Person对象绑定到GridView或Repeater中的任何位置到任何DataSource,则只绑定Person,并从其中一个属性获取默认绑定值。 支持我们有Ryan类型的变量Person,因此我希望通过调用<%# Eval("Ryan") %>来获取变量值而不是<%# Eval("Ryan.FirstName") %>

我试图为该类设置一个属性DefaultBindingProperty,但它不能正常工作

[System.ComponentModel.DefaultBindingProperty("FirstName")]
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

那么有人知道如何正确地做到这一点吗?

答案 1 :(得分:2)

我最后通过添加一个名为SelfReference的属性来解决这个问题,该属性只返回this。如果有人读到这个并有更好的解决方案,我想听听。

答案 2 :(得分:2)

您可以使用Container.DataItem代替: Item='<%# Container.DataItem %>'

答案 3 :(得分:1)

我不确定你想绑定什么。对我来说唯一有意义的是绑定到一些UI控件,例如DropDown控件。

显示的值通常有一些文本属性,实际值的值属性用作标识符。在下拉列表中

  • DataTextField
  • DataValueField

如果您的对象具有属性“Firstname”和“Id”,则指定DataTextField = "Firstname"DataValueField = "Id"

在列表中,您可以直接在ASPX代码上使用Eval函数,或者在列表模板中添加服务器端控件(即文字,标签)并实现ItemDataBound事件(使用Repeater)例如)。 Here's这是一个很好的例子,可以进一步说明这一点。

希望我能够帮助一点;)

答案 4 :(得分:0)

我想办法以某种方式。实际上它在“http://msdn.microsoft.com/en-us/library/ms752347.aspx

ListBox ItemsSource="{**Binding**}" IsSynchronizedWithCurrentItem="true"/>

请注意,尽管我们强调要使用的值的路径是绑定的四个必要组件之一,但在要绑定到整个对象的方案中,要使用的值将与绑定源对象。在这些情况下,它适用于不指定路径。请考虑以下示例:

XAML 复制