我的数据库有一个带有属性IsTrue的Table Foo。 我为这个数据库创建了一个Linq2SQL类“myData.dbml”,并将生成的Foo-Class添加到我的Datasources栏中。 我有一个带有ToggleButton的简单Winforms窗口,它应该绑定到IsTrue的逆。
为了实现这一点,我尝试将属性NotTrue添加到myData.dbml,但这导致了一个SQLException,无效的行名“NotTrue”。 我试图将属性代码添加到myData.cs中,如下所示:
public bool NotTrue {
get {
return !this._IsTrue;
}
set {
if (this._IsTrue == value) {
this.OnIsTrueChanging(!value);
this.SendPropertyChanging();
this._IsTrue = !value;
this.SendPropertyChanged("IsTrue");
this.SendPropertyChanged("NotTrue");
this.OnIsTrueChanged();
}
}
}
但是,即使添加[Bindable(true)]
什么有效,绑定到IsTrue并用这个来否定绑定:
private void InvertBoolBinding(ControlBindingsCollection collection,string property) {
foreach (Binding b in collection) {
if (b.PropertyName.Equals(property)) {
ConvertEventHandler invert = new ConvertEventHandler((sender, e) => { e.Value = !((bool)e.Value); });
b.Format += invert;
b.Parse += invert;
}
}
}
这样称呼:
InvertBoolBinding(lockToggleButton.DataBindings, "IsChecked");
虽然在我的主要项目中有大量的Bindings,但这种方法非常麻烦。似乎Datasources无法通过部分类连接属性。当我将属性添加到myData.designer.cs时,会找到它。但是这个课程经常重生,我的财产也会丢失。
所以也许我需要一种完全不同的方法,或者也许是一种使部分类扩展工作的方法。 我希望你对此有所了解。谢谢!