2012-06-28 4 views
2

Есть ли способ получить пользовательское связывание в формах win .net?custom binding .net forms

Пример, я подключение моего управления к объекту BindingSource и добавление привязки как

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

Там нет никакого способа, выше, будет работать, но я хотел, чтобы быть включен, если dataSource.FloatProperty становится больше, чем 0,5 е.

Есть ли способ сделать это?

ответ

1

Я понимаю, что вы хотите сделать, так что я немного исправил ситуацию для демонстрации: настройка пользовательского интерфейса очевидна, есть TrackBar и Button, и проблема в том, чтобы связать Enabled недвижимости от button до булева значения выражения trackBar.Value > 50.

Идея состоит в том, чтобы превратить основную форму во что-то вроде ViewModel (как в MVVM). Обратите внимание, что я реализую INotifyPropertyChanged.

enter image description here enter image description here

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-обновления посредством привязки непосредственно к «модели» еще более маниакально. Но вы получили признание за то, что были маниакальными! ;-)