2

.net win フォームでカスタム バインド動作を取得する方法はありますか?

例、コントロールを BindingSource オブジェクトに接続し、次のようなバインディングを追加しています

this.slider.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", this.bindingSourceModel, "FloatProperty  > 0.5f", true));

上記が機能する方法はありませんが、dataSource.FloatProperty が 0.5f を超えた場合に有効にするのが好きです。

これを行う方法はありますか?

4

1 に答える 1

1

TrackBar私はあなたが何をしたいのか理解してButtonいるので、デモンストレーションのためにあなたの状況を少し変更しましEnabledbutton.式trackBar.Value > 50

アイデアは、メイン フォームを (MVVM のように) ViewModel のようなものに変換することです。を実装していることに注意してINotifyPropertyChangedください。

ここに画像の説明を入力 ここに画像の説明を入力

public partial class ManiacalBindingForm : Form, INotifyPropertyChanged {

    public ManiacalBindingForm() {
        InitializeComponent();

        this.button.DataBindings.Add("Enabled", this, "ManiacalThreshold", true, DataSourceUpdateMode.OnPropertyChanged);

        this.trackBar.ValueChanged += (s, e) => {
            this.Text = string.Format("ManiacalBindingForm: {0}", this.trackBar.Value);
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs("ManiacalThreshold"));
        };
    }

    public bool ManiacalThreshold {
        get { return this.trackBar.Value > 50; }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    ...
}

さて、これは私の個人的な観察です。あなたの目標には自明ではない解釈がありますが、あなたの目標は少しマニアックです。なぜデータバインディングによってこれを達成したいのかを考える必要があります。バインディングは主に、プロパティ値の自動双方向同期を目的としています。「モデル」に直接バインドしてこの種の UI 更新を行うのは、さらにマニアックです。しかし、マニアックであることは称賛に値します。;-)

于 2012-07-18T23:25:53.497 に答える