我有一些嵌套集合的Objectmodel
:WPF數據綁定與嵌套集合不更新控制
public class MainViewModel : BaseViewModel
{
private Dictionary<String, Diagram> _diagrams;
public Dictionary<String, Diagram> Diagrams
{
get { return _diagrams; }
set
{
_diagrams = value;
OnPropertyChanged("Diagrams");
}
}
}
基本視圖模型實現INotifyPropertyChanged
。裏面Diagram
有曲線的集合:
public class Diagram
{
private ObservableCollection<DiagramCurve> curves;
[JsonIgnoreAttribute]
public ObservableCollection<DiagramCurve> Curves
{
get { return curves; }
}
public Diagram()
{
curves = new ObservableCollection<DiagramCurve>();
}
}
我綁定的DiagramCanvas
一個實例在我的XAML中這樣的:
<wd:DiagramCanvas x:Name="diagramCanvas"
Diagram ="{Binding Diagrams[Diagram1]}"
Grid.Row="2" Grid.Column="1"
Height="auto" Width="Auto"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Margin="10"
Background="{StaticResource DiagrambackgroundBrush }" />
,如果我完全分配的MainView
一個的圖表屬性,它工作正常新的圖集合。但是我需要的是當曲線集合改變時DiagramCanvas
控件得到更新。但是這並沒有發生。
我該如何在'MainViewModel'中註冊事件?我已經爲圖集合使用了一個ObservableDictionary類,但這不會有幫助,因爲我不更改此集合。 – Thomas 2013-02-13 21:27:56
是的,在這種情況下,您不應該註冊到Diagrams Collection更改的事件,而是註冊到Curves Collection更改的事件。第二個想法是:由於您也創建了自己的控件DiagramCanvas,因此該控件可以在收到圖表時註冊到Curvers.CollectionChanged。如果圖表發生變化,或者卸載視圖以避免內存泄漏,請不要忘記註銷事件。您也可以更改您的DiagramCanvas以提供Curves DependencyProperty,而不是圖。這樣,所有的事件註冊將是自動的。 – 2013-02-14 21:47:48
實際上,您可以在我自己的答案中看到DiagramCanvas現在註冊到Curves.OnColletionChanged事件。我需要綁定到DiagramProperty,因爲我的Control需要更多來自Diagram的數據作爲曲線。 – Thomas 2013-02-15 07:38:26