Отображение UserControl один раз с помощью DataTemplateSelector

У меня есть пара конкретных пользовательских элементов управления для отображения некоторого контента, например. простой, как Image, WebControl, а также два сложных пользовательских элемента управления, рисующих на холсте.

Теперь я подумал об использовании DataTemplateSelector для обработки различных пользовательских элементов управления. На самом деле я использовал этот http://tech.pro/tutorial/807/wpf-tutorial-how-to-use-a-datatemplateselector в качестве справки.

Я изменил код, чтобы форма динамически загружала пользовательские элементы управления (в соответствии с расширением файла) в следующем наборе:

ObservableCollection<string> _pathCollection = new ObservableCollection<string>();

Единственное отличие от ссылки заключается в том, что теперь я хочу перемещаться назад и вперед к следующему элементу управления, показывая только один элемент управления в данный момент. Какой элемент управления следует использовать вместо ListView?

<Grid>
    <ListView ScrollViewer.CanContentScroll="False" 
              ItemsSource="{Binding ElementName=This, Path=PathCollection}" 
              ItemTemplateSelector="{StaticResource imgStringTemplateSelector}">
    </ListView>
 </Grid>

Как мне привязать его к шаблону (равному ItemTemplateSelector выше)? WPF все еще очень нов для меня, и я учусь.


person Rolfi    schedule 22.04.2013    source источник


Ответы (1)


Используйте элемент управления контентом. Привяжите текущий элемент к свойству Content и DataTemplateSelector к свойству ContentTemplateSelector.

<ContentControl Content="{Binding Path=CurrentItem, Mode=OneWay}", ContentTemplateSelector="{StaticResource imgStringTemplateSelector}" />

Ваш CurrentItem должен быть свойством DependencyProperty или INotifyPropertyChanged вашего DataContext. Когда вы измените свой CurrentItem, ContentControl автоматически обновит шаблон с помощью вашего TemplateSelector.

person Bernhard Krenz    schedule 22.04.2013
comment
Спасибо, это сработало. Но небольшое исправление, чтобы оно работало («Это» — имя текущего окна): ‹ContentControl Content={Binding ElementName=This, Path=CurrentItem, Mode=OneWay} ContentTemplateSelector={StaticResource imgStringTemplateSelector} /› - person Rolfi; 22.04.2013