私のデータベースには、プロパティ IsTrue を持つ Table Foo があります。このデータベース用の Linq2SQL クラス "myData.dbml" を作成し、生成された Foo クラスをデータソース バーに追加しました。IsTrue の逆にバインドする必要がある ToggleButton を備えた Simple Winforms Window があります。
これを達成するために、プロパティ 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を追加してもプロパティは表示されませんでした[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 に追加すると、見つかりました。しかし、このクラスは定期的に再生成され、私の財産は失われます。
したがって、まったく異なるアプローチが必要な場合や、部分的なクラス拡張を機能させる方法がある場合があります。あなたがそれについていくつかのアイデアを持っていることを願っています。ありがとう!