문제

나는 a를 만드는 데 약간 혼란스러워합니다 DependencyProperty 외부 소스에 의존하는 속성의 경우. 예를 들어, 제가 쓰고있는 초음파 응용 프로그램에서 현재 관리되는 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");
}

또한, 부수적으로, 대부분의 속성이 데이터 펀드 인 경우 성능 향상이 발생하거나 많은 매개 변수가 데이터 라운드가 아닌 경우 성능 손실이 발생할 것으로 예상됩니까?

도움이 되었습니까?

해결책

종속성 속성을 사용하는 경우 get and set 메소드는 this.getValue () 및 this.setValue ()에 대한 간단한 랩퍼이어야합니다. 그 이유는 wpf가 getters 또는 setter를 사용하여 값에 액세스하지 않기 때문에 값에 액세스하지 않기 때문입니다. t는 항상 실행되는 추가 코드에 따라 다릅니다.

의존성 속성이 되려면 이러한 속성이 필요한 경우 초음파를 효과적으로 캐시하는 표준 종속성 속성을 작성하고 getparam (prmgain) 결과를 호출하고 속성 교환 이벤트 내부의 setparam (prmgain, value)을 호출하십시오. 속성이 변경되었습니다.


내가 위에서 쓴 것이 여전히 정확하지만, 질문을 다시 읽으면 의존성 속성이 무엇인지 오해 할 수 있다고 생각하게됩니다. 이 C ++ 래퍼 객체가 효과적으로 모델이라면 InotifyPropertyChanged를 사용하고 싶습니다. 종속성 특성은 바인딩을 용이하게하고 제어의 메모리 풋 프린트를 낮추기 위해 내부적으로 WPF 컨트롤에서 사용하도록 설계되었습니다. 데이터 제공 업체 내부에는 사용되지 않아야합니다. 이것이 알림 인터페이스의 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top