"Renderer"라는 단일 Dependendency 속성을 정의하는 종속성 개체가 있습니다.DependencyObject와 INotifyPropertyChanged를 모두 구현합니다.
<local: CellInfo x:key="cellInfo" />
및 I 등으로 결합 더 아래 :
XAML에서public class Renderer {
public string ResourceKey{get; set;}
public string[] Params{get; set;}
}
public class CellInfo : DependencyObject {
public static readonly DependencyProperty RendererProperty=
DependencyProperty.Register("Renderer", typeof(Renderer), typeof(CellInfo), null);
public Renderer Renderer {
get { return (Renderer)GetValue(RendererProperty); }
set { SetValue(RendererProperty, value); }
}
public void UpdateRenderer(string resourceKey, params string[] parameters) {
this.Renderer.ResourceKey = resourceKey;
this.Renderer.Params = parameters;
//force refresh - this does not work
Renderer tmp = this.Renderer;
this.Renderer = null;
this.Renderer = tmp;
}
}
I는 다음과 같이 그것의 선언있어 상기 컨트롤 템플릿은 디스플레이로 사용
<ControlTemplate x:Key="MyDisplayTemplate" >
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Stretch" >
<TextBlock.Text>
<MultiBinding Converter="{StaticResource MyConverter}" >
<Binding Path="Value" />
<Binding Source="{StaticResource cellInfo}" Path="Renderer"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</ControlTemplate>
그리드의 셀 템플릿. 내가 그것을 이해하고 INotifyPropertyChanged
을 구현하는 것보다 성능 및 메모리 리소스 에지를 가지고 있기 때문에 성능상의 이유로 여기에 의존성 객체/속성을 사용하고 싶다.
내가 겪고있는 문제는 렌더러 객체의 데이터가 변경 될 때 셀에 대한 트리거를 업데이트하는 것입니다. 코드에서 먼저 값을 null로 설정 한 다음 값을 원래 속성 값으로 다시 설정하여 값이 동일하면 종속성 속성이 업데이트를 트리거하지 않는다는 사실을 알아 내려고 시도합니다. 이것은 작동하지 않습니다.
내가 작업 할 수 있었던 유일한 점은 객체가 INotifyPropertyChanged
을 구현하고 CellInfo.Renderer
setter에 PropertyChanged
이벤트를 발생시키는 것입니다.
내 생각에 INotifyPropertyChange
을 구현하면 DependencyObjects
만을 사용하면 성능상의 이점이 없어집니다. 맞습니까? 이 시점에서, 만약 내가 INotifyPropertyChanged
을 구현하도록 강요한다면, 심지어 DependencyObject
을 확장 할 수 없을까?
입력 해 주셔서 감사합니다.
'클래스 렌더러'가 불변으로 만들어지면 훨씬 쉬워 질 것입니다. –
왜? 올바른 가정 (마지막 단락 참조) – mike01010
변경할 수없는 값을 한 번에 모두 바꿔야하고 알림을 실행합니다. –