我有一个Objectmodel
包含一些嵌套的集合:
public class MainViewModel : BaseViewModel
{
private Dictionary<String, Diagram> _diagrams;
public Dictionary<String, Diagram> Diagrams
{
get { return _diagrams; }
set
{
_diagrams = value;
OnPropertyChanged("Diagrams");
}
}
}
Base Viewmodel实现INotifyPropertyChanged
。在Diagram
里面有一个曲线集合:
public class Diagram
{
private ObservableCollection<DiagramCurve> curves;
[JsonIgnoreAttribute]
public ObservableCollection<DiagramCurve> Curves
{
get { return curves; }
}
public Diagram()
{
curves = new ObservableCollection<DiagramCurve>();
}
}
我绑定到我的Xaml中的DiagramCanvas
实例,如下所示:
<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
分配一个全新的Diagrams集合的Diagrams属性,它可以正常工作。但我需要的是当曲线集合发生变化时DiagramCanvas
控制得到更新。但这不会发生。
答案 0 :(得分:0)
您的绑定位于MainViewModel
Diagrams
属性上,并选择与“Diagram1”字符串对应的图表。在绑定路径中,没有提及Curves
属性,因此当Curves抛出CollectionChanged
事件时,绑定不会更新。为了防止这种情况发生,您可以在MainViewModel
中注册此事件,并在字典中抛出好PropertyChanged
事件。
但是......如果我没弄错的话.Net字典没有实现INotifyCollectionChanged
,我也不确定绑定是否会更新。你应该试着让我知情。
快乐编码,
安托
答案 1 :(得分:0)
我尝试从'ObservableCollection'继承Diagram
,但即使这样也无法解释,如ObservableCollection dependency property does not update when item in collection is deleted所述。
由于CustomControl DiagramCanvas
的DependencyProperty绑定到Dictionary MainViewModel.Diagrams
的值项而不绑定到Diagram
实例的属性,因此DependencyProperty没有OnPropertyChanged
事件当DiagramCanvas
实例的属性发生变化时,会触发Diagram
。
只有在为词典MainViewModel.Diagrams
内的值项目分配新值时,才会触发此事件,因为这会为DependencyProperty
的{{1}}分配新值。
因此我必须手动订阅集合的事件:
DiagramCanvas