使用Asp.net的Bind()方法,如何绑定到对象本身,而不是其中一个属性?
答案 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控件。
显示的值通常有一些文本属性,实际值的值属性用作标识符。在下拉列表中
如果您的对象具有属性“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 复制