我有一个依赖对象,它定义了一个名为“Renderer”的单一依赖属性。
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;
}
}
在 XAML 中,我这样声明:
<local: CellInfo x:key="cellInfo" />
再往下,我像这样绑定到它:
<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
出于性能原因,我想在此处使用依赖对象/属性,因为据我所知,它们确实具有性能和内存资源优势。
我遇到的问题是,当 Renderer 对象的数据发生更改时,要触发单元格的更新。在代码中,我试图绕过这样一个事实,即如果值相同,则依赖属性不会触发更新,方法是首先设置为 null,然后设置回原始属性值。这不起作用。
我唯一能够开始工作的就是让对象实现并在setter中INotifyPropertyChanged
触发PropertyChanged
事件。CellInfo.Renderer
我的猜测是必须实现INotifyPropertyChange
否定 using only 的性能优势,对DependencyObjects
吗?在这一点上,如果我被迫实施INotifyPropertyChanged
,我什至不扩展DependencyObject
,对吗?
感谢您的任何意见。