외부 소스에 의존하는 속성의 경우 DependencyProperty
을 만드는 데 다소 혼란 스럽습니다. 예를 들어, 내가 쓰고 있어요 초음파 응용 프로그램에서, 나는 현재 (에서 INotifyPropertyChanged를 구현, 여기에 단순위한 C 번호로 변환) 관리되는 C++ 래퍼에 다음과 같습니다값이 로컬에 저장되지 않는 DependencyProperties
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");
}
또한, 보조 노트에, 나는 대부분의 속성은 데이터 바인딩있는 경우에 성능 향상을 기대한다, 또는 오히려, 경우에 성능 손실은 어디에 많은 매개 변수 데이터 바인딩되지 않습니다?
이것은 내가 this.Gain (which는 ultrasound.GetParam)을 호출 할 때 SetValue를 호출하는 이유이며 값이 수동으로 설정되는 경우 값입니다. 위의 논리는 항상 Gain의 최신 로컬 버전을 유지할 것이라고 생각했습니다. –
나는 당신이 가치를 얻는 것이 좋다고 생각합니다. 내 관심사는 설정입니다. 값이 WPF 바인딩을 통해 설정되면 Set을 호출하지 않습니다. 따라서 ultrasound.SetParam (prmGain, value); 호출되지 않고 초음파 객체의 값이 업데이트되지 않습니다. 바인딩은 get 또는 set을 호출하지 않고 종속성 속성 자체에서 직접 작동합니다. –
당신은 아마 내가 너무 많이 생각하고 있다고 생각합니다. 나는 그것을 INotifyPropertyChanged로 유지해야합니다. DepotencyProperties가 속도를 높일 수 있다고 생각 했으므로 WPF에 데이터 바인딩을위한 기능으로 구현 된 INotifyPropertyChanged 만 있습니다. 그러나 로컬 변수가 아니라는 사실로 인해 데이터가 동기화되지 않아 복잡해졌습니다. –