ho una barra degli strumenti con 3 DataTemplates per Mie:ObservableCollection.CollectionChanged non selezionare il DataTemplate corretta sul ToolBar
<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>
L'ItemsSource è un ObservableCollection <oggetto>
I primi tre elementi sono già disponibile nel costruttore del mio ViewModel, quei tre usano i DataTemplates come previsto.
Se aggiungo un altro "SimpleContextActionViewModel" a ObservableCollection, la barra degli strumenti aggiunge solo un ContentPresenter che chiama ToString. Se posso aggiungere la seguente riga alla reasign l'ObservableCollection ad uno nuovo, tutto funziona bene:
this.ContextActions = new ObservableCollection<object>(this.ContextActions);
questo innesca l'attuazione NotifyPropertyChanged del mio ViewModel e tutti gli articoli sono ricreati e guardare bene.
Perché un CollectionChanged della mia ObservableCollection non seleziona un DataTemplate valido mentre PropertyChanged lo fa ?.
Questo è come appare
Lo proverò domani, anche se sembra davvero sporco gestire così modelli di dati specifici a livello di applicazione. – Console
@Console non è sicuro del motivo per cui l'approccio standard non funziona. Mi sono imbattuto in questo qualche tempo fa. Se vuoi una soluzione diversa, puoi provare ad implementare un ItemTemplateSelector e vedere se è possibile assegnare DataTemplates in questo modo? – Krishna