Mam pasek narzędzi z 3 DataTemplates dla moich przedmiotów:ObservableCollection.CollectionChanged nie wybrać właściwą DataTemplate Na pasku
<ToolBar ItemsSource="{Binding ContextActions}" Background="Transparent" ToolBarTray.IsLocked="True">
<ToolBar.Resources>
<DataTemplate DataType="{x:Type viewModels:SimpleContextActionViewModel}">
<Button Command="{Binding ActionCommand}" Style="{StaticResource ToolBarButtonStyle}" ToolTip="{userInterface:Translation Binding={Binding ToolTip}}">
<ContentControl Template="{Binding Icon,Converter={StaticResource NameToResourceConverter}}" Margin="5" />
</Button>
</DataTemplate>
<DataTemplate DataType="{x:Type viewModels:SeparatorViewModel}">
<Rectangle Fill="{StaticResource SeparatorBrush}" Width="1" VerticalAlignment="Stretch" Margin="2,7" />
</DataTemplate>
<DataTemplate DataType="{x:Type viewModels:PopupContextActionViewModel}">
<Grid>
<ToggleButton IsChecked="{Binding ElementName=ContextActionPopup, Mode=TwoWay,Path=IsOpen}" Style="{StaticResource ToolBarButtonStyle}"
ToolTip="{userInterface:Translation Binding={Binding ToolTip}}">
<ContentControl Template="{Binding Icon, Converter={StaticResource NameToResourceConverter}}" Margin="5" />
</ToggleButton>
<Popup Name="ContextActionPopup" Height="150" Width="150" StaysOpen="False">
<Border BorderBrush="{StaticResource PopupBorderBrush}" BorderThickness="1" Background="White">
<ContentControl userInterface:RegionHelper.RegionName="{Binding RegionId}" />
</Border>
</Popup>
</Grid>
</DataTemplate>
</ToolBar.Resources>
</ToolBar>
ItemsSource jest ObservableCollection <obiekt>
Pierwsze trzy pozycje są już dostępne w konstruktorze mojego ViewModel, te trzy używają DataTemplates zgodnie z oczekiwaniami.
Jeśli dodaję kolejny "SimpleContextActionViewModel" do ObservableCollection, ToolBar dodaje tylko ContentPresenter, który wywołuje ToString. Jeśli dodać następującą linię do reasign z ObservableCollection na nowy, wszystko działa prawidłowo:
this.ContextActions = new ObservableCollection<object>(this.ContextActions);
ten wyzwala NotifyPropertyChanged Realizacja mojego ViewModel i wszystkie przedmioty są odtworzone i wyglądać dobrze.
Dlaczego kolekcja CollectionChanged mojej ObservableCollection nie wybiera poprawnego DataTemplate, gdy PropertyChanged działa ?.
Jak to wygląda
Wypróbuję to jutro, chociaż bardzo trudno jest zarządzać tak specyficznymi szablonami danych na poziomie aplikacji. – Console
@ Konsola nie jest pewna, dlaczego standardowe podejście nie działa. Natknąłem się na to kiedyś. Jeśli chcesz innego rozwiązania, czy możesz spróbować zastosować ItemTemplateSelector i sprawdzić, czy możesz przypisać DataTemplates w ten sposób? – Krishna