我在win表单上为Title Text框设置了双向数据绑定,如下所示:
txtTitle.DataBindings.Add("Enabled", Person, "Editable", true, DataSourceUpdateMode.OnPropertyChanged);
不幸的是,当文本处于禁用状态时,用户无法复制文本。是否有任何解决方法来启用COPY / PASTE保留双向数据绑定?
答案 0 :(得分:1)
文本框控件具有ReadOnly属性,您可以将其设置为true。绑定仍应更新。
选项1:使用NotifyPropertyChanged创建一个类
创建一个包含将被绑定的数据的类:
public class Book : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string name;
[Bindable(true)]
public string Name
{
get { return name; }
set
{
name = value;
if (PropertyChanged != null)
PropertyChanged(this,
new PropertyChangedEventArgs("Name"));
}
}
public Book(string name)
{
Name = name;
}
}
创建此类的实例并绑定它:
public Book TheBook { get; set; }
public Form1()
{
InitializeComponent();
TheBook = new Book("");
textBox1.DataBindings.Add(new Binding("Text",
TheBook,
"Name",
true,
DataSourceUpdateMode.OnPropertyChanged,
""));
}
更改属性,它将更新:
private void button1_Click(object sender, EventArgs e)
{
TheBook.Name = "Different";
}
选项2:创建自定义控件以屏蔽已启用为ReadOnly
创建以下自定义控件并将其用于绑定到Enabled:
public partial class DBTextBox : TextBox
{
private bool enabled;
public new bool Enabled
{
get { return enabled; }
set
{
enabled = value;
base.Enabled = true;
ReadOnly = !enabled;
}
}
public DBTextBox()
{
InitializeComponent();
}
}
每当DBTextBox设置为Enabled = false时,它将使其成为ReadOnly。
答案 1 :(得分:0)
覆盖Enable属性,设置本地标志,通过本地标志过滤按下键时忽略用户输入。并设置颜色以假装它已被禁用。