我正在尝试启用按钮,只有当文本出现在 WinForm应用程序的两个文本框中时。
我的问题是 - 我可以使用数据绑定实现这一目标吗? 如果是这样的话?
修改
请说明downvote的原因。
答案 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();
}
}
您可以使用这些类MultiBinding
和IMultiValueConverter
,您必须在项目中添加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;
}
}
}
,但它可以更轻松地实现与多个来源配合使用。