2015-03-20 3 views
0

У меня есть приложение WPF со следующим XAML в моем MainWindow.xaml.Почему конструктор вызван в моем WPF при привязке?

Я не понимаю, почему вызывается конструктор DxTaskList при вызове OnPropertyChanged("Sequences");. Как вы видите ниже, элемент управления вкладками привязан к списку последовательностей. В соответствующем классе модели представления у меня есть свойство 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

Все, кажется, работает должным образом. Если ваше свойство Sequences является ObservableCollection, оно будет обходить NotifyPropertyChanged при любом изменении размера коллекции. Если Sequences не является ObservableCollection, но является другим IEnumerable, то ваш OnPropertyChanged («Последовательности») это сделает.

Возврат к списку вопросов: Предположим, что это не ObservableCollection. Вы вставляете элемент, а затем запускаете OnPropertyChanged («Последовательности»), создается новый DxTaskList (ctor вызывается) и вставляется в визуальное дерево.

Повторите вызов OnPropertyChanged («Последовательности») дважды подряд, я уверен, вы только нажимаете на конструктор после первого, а не на втором. Если нет, это может быть из-за того, как DxTabControl внутренне реализуется.

+0

Мои последовательности - это ObservableCollection, значит ли это, что конструктор DxTaskList следует вызывать только один раз? Или он должен быть вызван каждый раз, когда изменяется список последовательностей? – Ray

+0

Я не на 100% на это, но да, когда список изменений, TabControl должен создавать новый элемент, и, следовательно, создается новый DxTaskList. Но если вы используете PRISM, если PartCreationPolicy на DxTaskList является общим (или, возможно, даже не указанным, например, по умолчанию), вам будет предоставлен статический (singleton) экземпляр ergo no ctor (кроме первого раза). – JohnWrensby

Смежные вопросы