gpt4 book ai didi

.net - 数据绑定(bind) 101. 如何在 .Net 中进行

转载 作者:行者123 更新时间:2023-12-05 00:03:01 26 4
gpt4 key购买 nike

这似乎是一件显而易见的事情,但我就是想不通。假设我有一个字符串列表。如何将它绑定(bind)到列表框,以便列表框随着列表数据的变化而更新?我正在使用 vb.net。

到目前为止,我已经尝试过了。我已经设法显示数据,但没有改变它:

Public Class Form1

Private mycountries As New List(Of String)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

mycountries.Add("Norway")
mycountries.Add("Sweden")
mycountries.Add("France")
mycountries.Add("Italy")
mycountries.Sort()
ListBox1.DataSource = mycountries 'this works fine

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
mycountries.RemoveAt(0)
ListBox1.DataSource = mycountries 'this does not update
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
MsgBox(mycountries(0))
End Sub
End Class

我也试过这个:
ListBox1.DataBindings.Add("items", mycountries, "Item")

但是 items 是只读的,所以它不起作用。

另外,如果我想将按钮的启用属性绑定(bind)到 bool 值,我该怎么做?
我已经尝试过了,但我不知道要为最后一个参数添加什么。
Dim b As Boolean = True
Button3.DataBindings.Add("Enabled", b, "")

最佳答案

您需要使用支持数据源更改通知的集合。当您从普通列表中删除一个项目时,它不会告诉任何人。

这是使用 BindingList 的示例反而:

Public Class Form1

Private mycountries As New BindingList(Of String)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

mycountries.Add("Norway")
mycountries.Add("Sweden")
mycountries.Add("France")
mycountries.Add("Italy")
' BindingList doesn't have a Sort() method, but you can sort your data ahead of time
ListBox1.DataSource = mycountries 'this works fine

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
mycountries.RemoveAt(0)
' no need to set the DataSource again here
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
MsgBox(mycountries(0))
End Sub
End Class

对于第二个问题,添加数据绑定(bind)时不要绑定(bind)到变量。您绑定(bind)到一个对象(充当数据源),然后在该对象上指定一个属性,该属性将为您提供要绑定(bind)到的值。

所以,对于一个按钮,你想要这样的东西(为 C# 道歉,但你会明白的):

public class SomeModel
{
public bool ButtonEnabled { get; set; }
}
public class Form1 : Form
{
public Form1()
{
InitializeComponent();
SomeModel model = new SomeModel();

// first parameter - button's property that should be bound
// second parameter - object acting as the data source
// third parameter - property on the data source object to provide value
button1.DataBindings.Add("Enabled", model, "ButtonEnabled");
}

一般来说,数据绑定(bind)都是关于更改通知的。如果您需要绑定(bind)到自定义对象,请查看 INotifyPropertyChanged 界面。

关于.net - 数据绑定(bind) 101. 如何在 .Net 中进行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7348323/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com