为什么在绑定时在我的WPF中调用构造函数?

时间:2015-03-20 14:12:46

标签: wpf xaml prism

我的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>

1 个答案:

答案 0 :(得分:0)

一切似乎都在起作用。 如果您的Sequences属性是ObservableCollection,它将在对集合大小的任何更改时触发NotifyPropertyChanged。如果Sequences不是ObservableCollection,而是其他IEnumerable,则OnPropertyChanged(“Sequences”)将执行此操作。

回到你的问题: 我们假设它不是ObservableCollection。您插入一个项目然后触发OnPropertyChanged(“Sequences”),创建一个新的DxTaskList(调用ctor)并插入到可视树中。

尝试连续两次调用OnPropertyChanged(“Sequences”),我打赌你只是在第一个之后击中构造函数,而不是第二个。如果没有,可能是因为DxTabControl在内部实现的方式。