我有一個依賴對象,它定義了一個名爲「Renderer」的依賴屬性。實現DependencyObject和INotifyPropertyChanged
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對象的數據發生變化時,我遇到的問題是觸發單元格的更新。在代碼中,我試圖解決這個事實,即如果值是相同的,則依賴屬性不會觸發更新,通過首先設置爲空,然後設置回原始屬性值。這不起作用。
我已經能夠上班的唯一的事情是也有對象執行INotifyPropertyChanged
和解僱PropertyChanged
事件CellInfo.Renderer
二傳手。
我的猜測是必須實施INotifyPropertyChange
否定僅使用DependencyObjects
的性能好處,是否正確?此時,如果我被迫執行INotifyPropertyChanged
,我甚至可能不會延長DependencyObject
,對嗎?
感謝您的任何意見。
當'class Renderer'變得不可變時,這會更容易。 – 2012-07-19 17:11:28
爲什麼?並且我的假設是正確的(請參見最後一段) – mike01010 2012-07-19 17:13:58
不可變的值必須一次全部換出並觸發通知。 – 2012-07-19 17:19:11