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

我明白你想要做什么,所以为了演示,我稍微修改了你的情况:UI设置很明显,有 aTrackBar和 a Button,这里的问题是将Enabled属性绑定button到布尔值表达trackBar.Value > 50

这个想法是将主要形式变成类似于 ViewModel 的东西(如在 MVVM 中)。观察我正在实施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 回答