0

我的数据库有一个属性为 IsTrue 的表 Foo。我为此数据库创建了一个 Linq2SQL 类“myData.dbml”,并将生成的 Foo 类添加到我的数据源栏中。我有一个带有 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();
        }
    }
}

但是,即使在添加时,将 Foo 添加到 Datasources 时属性也没有出现[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");

虽然在我的主要项目中有大量的绑定,但这种方法很麻烦。似乎 Datasources 无法通过部分类连接属性。当我将该属性添加到 myData.designer.cs 时,它被找到了。但是这个类会定期再生,我的财产会丢失。

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

4

1 回答 1

0

将 Linq2SQL 类移动到不同的程序集会使 Visual Studio 解析部分连接。

在这里找到。

于 2012-12-17T15:01:56.737 回答