绑定按钮启用属性到多个TextBox WinForm的文本属性

时间:2018-01-16 08:34:53

标签: c# .net winforms data-binding

我正在尝试启用按钮,只有当文本出现在 WinForm应用程序两个文本框中时。

我的问题是 - 我可以使用数据绑定实现这一目标吗? 如果是这样的话?

修改

请说明downvote的原因。

2 个答案:

答案 0 :(得分:0)

更新:由于OP希望与DataBinding合作,因此这里只是一个采用所需技术的解决方案。

您需要使用MultiBinding。添加两个Binding个实例(每个TextBox一个)。然后,您需要实现一个IMultiValueConverter,它将接受两个绑定对象生成的值并将它们转换为单个值。

绑定设置看起来像这样:

var multiBinding = new MultiBinding();
multiBinding.Bindings.Add(new Binding("Enabled", textBox1, "Text", true));
multiBinding.Bindings.Add(new Binding("Enabled", textBox2, "Text", true));
multiBinding.Converter = new MyMultiValueConverter();

button1.DataBindings.Add(multiBinding);

转换器实现看起来像:

public class MyMultiValueConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        // perform your conversion here and return the final value
        // so which value both textBoxes need to have that you return `true` so
        // that `button1.Enabled` gets set to `true`
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

您可以使用这些类MultiBindingIMultiValueConverter,您必须在项目中添加PresentationFramework lib的引用。此外,我建议你补充一下:

using System.Windows.Data;

缩短您的代码。

答案 1 :(得分:0)

由于我已经发布了一个答案,并且它是OP所希望的合法工作解决方案,我不会编辑问题,而是在新问题中显示另一种方法。

您可以创建一个计算属性并将button.1.Enabled属性绑定到它。例如,创建一个返回值的textBoxesCorrect属性,并将button.1.Enabled绑定到该属性。 textBoxesCorrect属性设置在TextChanged()的{​​{1}}个事件中。

TextBoxes

因此仍可以使用private void textBox1_TextChanged(object sender, EventArgs e) { if (textBox1.Text == "") //desired text that the textBoxes shell contain MyData.textBox1Correct = true; else MyData.textBox1Correct = false; } private void textBox2_TextChanged(object sender, EventArgs e) { if (textBox2.Text == "") //desired text that the textBoxes shell contain MyData.textBox2Correct = true; else MyData.textBox2Correct = false; } public class MyData { public static bool textBox1Correct { get; set; } public static bool textBox2Correct { get; set; } public bool textBoxesCorrect { get { if (textBox1Correct && textBox2Correct) return true; else return false; } } } ,但它可以更轻松地实现与多个来源配合使用。