如何使Linq2SQL类的自定义属性可绑定?

时间:2012-12-17 13:15:30

标签: c# winforms linq-to-sql data-binding

我的数据库有一个带有属性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)]

,在向数据源添加Foo时,该属性也没有出现

什么有效,绑定到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时,会找到它。但是这个课程经常重生,我的财产也会丢失。

所以也许我需要一种完全不同的方法,或者也许是一种使部分类扩展工作的方法。 我希望你对此有所了解。谢谢!

1 个答案:

答案 0 :(得分:0)

将Linq2SQL类移动到另一个程序集使Visual Studio解析部分连接。

找到here