我有一个List和一个Button。当Lists Count == 0时,我希望按钮Visibility为= false。
如何使用数据绑定执行此操作?
提前致谢,
添加
我已经问过这个问题,这样每次我在列表中添加或删除项目时,我都可以尝试避免在代码列表中检查Count。但如果没有解决方案,那么我将继续这样做。
答案 0 :(得分:5)
创建一个DTO(数据传输对象),公开您要绑定到UI元素的所有数据。在DTO中创建一个属性(具有适当的名称):
public bool ButtonVisible
{
get { return myListCount != 0; }
}
在表单中添加BindingSource
,并将其DataSource
设置为您的DTO类型。
单击按钮,转到属性。展开 DataBindings 节点,然后点击高级。
向下滚动左侧窗格中的列表,然后选择“可见”。设置它绑定到您在BindingSource上公开的属性..
答案 1 :(得分:0)
由于问题目前的措辞,听起来并不像它与DataBind有任何关系。
如果我们有一个列表 - 无论是通过代码填充还是绑定到数据源 - 我们都可以根据计数设置按钮的可见性。 e.g。
List<string> somelist = new List<string>();
somelist.Add("string1");
somelist.Add("string2");
Button1.Visible = somelist.Count > 0 ? true : false;
答案 2 :(得分:0)
我认为您希望使用CurrencyManager和控件的BindingContext。
http://www.akadia.com/services/dotnet_databinding.html#CurrencyManager
答案 3 :(得分:0)
一般答案
编写一个事件处理程序并将其注册到list-control的绑定对象
具体示例
class MyForm : Form {
protected Button myButton;
BindingSource myBindingSource;
DataGridView dgv;
public MyForm(List someList) {
myBindingSource = new BindingSource();
dgv = new DataGridView();
this.myButton = new Button();
this.Controls.Add(myButton);
this.Controls.Add(dgv);
myBindingSource.DataSource = someList;
dgv.DataSource = myBindingSource;
dgv.DataSource.ListChanged += new ListChangedEventHandler (ListEmptyDisableButton);
}
protected void ListEmptyDisableButton (object sender, ListChangedEventArgs e) {
this.myButton.Visible = this.dgv.RowCount <= 0 ? false : true;
}
}
PS - 我会拒绝最喜欢的答案。数据传输对象(DTO)错过了.NET Binding架构的全部要点和功能