Я немного запутался в создании DependencyProperty
для свойств, которые зависят от внешних источников. Например, в ультразвуковом приложении, которое я пишу, в настоящее время у меня есть следующее в оболочке Managed C ++ (здесь для простоты переведен на C #, реализующий INotifyPropertyChanged):
public int Gain
{
get { return ultrasound.GetParam(prmGain); }
set
{
ultrasound.SetParam(prmGain, value);
NotifyPropertyChanged("Gain");
}
}
Весь мой код используется в WPF, и я размышлял, как произойдет изменение INotifyPropertyChanged
на DependencyProperty
и получу ли я пользу от этих изменений. Существует около 30 переменных, похожих на эту, большинство из которых привязаны к экранному слайдеру, текстовому блоку или другому элементу управления.
Правильно ли следующее для реализации DependencyProperty
для этого объекта?
public int Gain
{
get { return ultrasound.GetParam(prmGain); }
set
{
ultrasound.SetParam(prmGain, value);
this.SetValue(GainProperty, value);
}
}
public static readonly DependencyProperty GainProperty = DependencyProperty.Register(
"Gain", typeof(int), typeof(MyUltrasoundWrapper), new PropertyMetadata(0));
Я никогда не видел пример, где this.GetValue(GainProperty)
не использовался. Также есть другие функции, которые могут изменять значение. Это тоже будет правильным изменением?
public void LoadSettingsFile(string fileName)
{
// Load settings...
// Gain will have changed after new settings are loaded.
this.SetValue(GainProperty, this.Gain);
// Used to be NotifyPropertyChanged("Gain");
}
Кроме того, стоит отметить, что следует ожидать повышения производительности в случаях, когда большинство свойств связаны с данными, или, скорее, потери производительности в случаях, когда многие параметры НЕ связаны с данными?