C# - 我可以在值和表达式之间绑定数据吗?

时间:2009-07-27 14:48:53

标签: c# winforms data-binding .net-2.0

我有一个List和一个Button。当Lists Count == 0时,我希望按钮Visibility为= false。

如何使用数据绑定执行此操作?

提前致谢,

添加
我已经问过这个问题,这样每次我在列表中添加或删除项目时,我都可以尝试避免在代码列表中检查Count。但如果没有解决方案,那么我将继续这样做。

4 个答案:

答案 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架构的全部要点和功能