我的MainWindow.xaml中有一个带有以下XAML的WPF应用程序。
我不明白为什么在调用OnPropertyChanged("Sequences");
时调用DxTaskList构造函数。如下所示,我的选项卡控件绑定到序列列表。在相关的视图模型类中,我有一个我修改的Sequences属性,所以我自然需要让视图知道,所以我调用OnPropertyChanged("Sequences")
,但我试图理解WPF的工作原理。
刷新父级的绑定时,是否重建了整个可视化树?这是如何运作的?请注意我的应用程序使用Prism,所以我不确定这是否有所作为。
<dxdo:LayoutPanel Caption="TaskList">
<dx:DXTabControl x:Name="TabControl"
ItemsSource="{Binding Sequences}"
SelectionChanged="TabControl_OnSelectionChanged">
<dx:DXTabControl.View>
<dx:TabControlMultiLineView HeaderLocation="Bottom"/>
</dx:DXTabControl.View>
<dx:DXTabControl.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Name}"></TextBlock>
<views:DxTaskList x:Name="Tasklst"/>
</Grid>
</DataTemplate>
</dx:DXTabControl.ItemTemplate>
</dx:DXTabControl>
</dxdo:LayoutPanel>
答案 0 :(得分:0)
一切似乎都在起作用。 如果您的Sequences属性是ObservableCollection,它将在对集合大小的任何更改时触发NotifyPropertyChanged。如果Sequences不是ObservableCollection,而是其他IEnumerable,则OnPropertyChanged(“Sequences”)将执行此操作。
回到你的问题: 我们假设它不是ObservableCollection。您插入一个项目然后触发OnPropertyChanged(“Sequences”),创建一个新的DxTaskList(调用ctor)并插入到可视树中。
尝试连续两次调用OnPropertyChanged(“Sequences”),我打赌你只是在第一个之后击中构造函数,而不是第二个。如果没有,可能是因为DxTabControl在内部实现的方式。