代码之家  ›  专栏  ›  技术社区  ›  Lloyd Powell binku

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

  •  0
  • Lloyd Powell binku  · 技术社区  · 15 年前

    我有一个列表和一个按钮。当列表计数=0时,我希望按钮可见性为=false。

    如何使用数据绑定实现这一点?

    提前感谢,,

    补充
    我这样做是为了避免每次在列表中添加或删除项目时都在代码中检查列表的计数。但如果没有解决办法,我会继续这样做。

    4 回复  |  直到 15 年前
        1
  •  5
  •   Mitch Wheat    15 年前

    创建一个DTO(数据传输对象),该对象公开要绑定到UI元素的所有数据。在DTO中创建属性(使用适当的名称):

    public bool ButtonVisible
    {
       get { return myListCount != 0; }
    }
    

    添加 BindingSource 把它放在你的表格上 DataSource

    点击按钮,转到 属性 节点,然后单击 .

    在左侧窗格中向下滚动列表,然后选择“可见”。将其绑定到BindingSource中公开的属性。。

        2
  •  0
  •   Mark Maslar    15 年前

    由于这个问题目前的措辞,听起来似乎与数据绑定无关。

    如果我们有一个列表——不管它是通过代码填充的还是绑定到数据源的——我们可以根据计数设置按钮的可见性。 例如

    List<string> somelist = new List<string>();
    somelist.Add("string1");
    somelist.Add("string2");
    Button1.Visible = somelist.Count > 0 ? true : false;
    
        3
  •  0
  •   MyItchyChin JNK    15 年前

    我想您应该使用CurrencyManager和控件的BindingContext。

    http://www.akadia.com/services/dotnet_databinding.html#CurrencyManager

        4
  •  0
  •   radarbob    13 年前

    编写事件处理程序并将其注册到列表控件的绑定对象中

    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;          
    }
    

    }