Вы можете попробовать расширить DataGrid
и затем реализовать событие NotifyPropertyChange
. Примерно так:
class MyDataGrid : DataGrid, INotifyPropertyChanged
{
private DataGridLength _columnWidth;
public DataGridLength ColumnWidth
{
get { return _columnWidth; }
set
{
_columnWidth = value;
NotifyPropertyChanged("ColumnWidth");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Оттуда вы можете добавить отсрочку к обработчику, чтобы делать все, что вы хотите, чтобы он делал. Что-то вроде:
MyDataGrid dataGrid;
//init grid, do stuff
dataGrid.PropertyChanged += new PropertyChangedEventHandler(ColumnWidthChanged);
//ColumnWidthChanged will be a method you define
Теперь, когда у вас есть delagate, вы можете определить, что вы хотите, чтобы происходило при изменении ширины столбца:
private void ColumnWidthChanged(object sender, PropertyChangedEventArgs args)
{
if(args.PropertyName.Equals("ColumnWidth"))
{
//Do stuff now that the width is changed
}
}
Вы заметите, что я проверяю, какое свойство было изменено. Я настроил его так, что вы можете расширять другие свойства и создавать обработчики для их изменения. Если вам нужно более одного обработчика, вероятно, было бы лучше создать метод DataGridPropertyChanged
, который включает, какое свойство было изменено. Затем он вызовет соответствующий метод (например, ColumnWidthChanged
) для каждого изменяемого свойства. Таким образом, вам не нужно проверять, что каждый обработчик изменяет только одно свойство.
Вы не указали язык, поэтому я переназначил его на C #. Однако, это должно быть достаточно просто для транспонирования в VB, если вы используете это.
Надеюсь, это поможет!