Вот мой конкретный сценарий.Как добавить DataTemplate в CollectionContainer?
Код окна ресурсы:
...
<Window.Resources>
<ResourceDictionary>
<CollectionViewSource x:Key="AdditionalStringData" Source="{Binding ViewModelObservableCollection_String}"/>
<CollectionViewSource x:Key="AdditionalCustomObjectData" Source="{Binding ViewModelObservableCollection_CustomObject}"/>
<ResourceDictionary.MergedDictionaries>
...
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
...
часть, где мне нужно, чтобы отобразить Коллекция:
...
<StackPanel>
<ItemsControl>
<ItemsControl.ItemsSource>
<CompositeCollection>
<TextBlock Text="{Binding ViewModelTextProperty}"/>
<Button Command="{Binding ViewModelRelayCommand}">Command</Button>
<CollectionContainer Collection="{Binding Source={StaticResource AdditionalStringData}}" />
<CollectionContainer Collection="{Binding Source={StaticResource AdditionalCustomObjectData}}" />
</CompositeCollection>
</ItemsControl.ItemsSource>
</ItemsControl>
</StackPanel>
...
ViewModel (предположим, что он правильно переплетены)
...
private string ViewModelTextProperty { get; set; } = "Sample Text";
public RelayCommand ViewModelRelayCommand { ... }
private ObservableCollection<string> ViewModelObservableCollection_String { get; set; } = new ObservableCollection<string>();
private ObservableCollection<CustomObject> ViewModelObservableCollection_CustomObject { get; set; } = new ObservableCollection<CustomObject>();
...
Класс CutomObject (это может быть необязательно показывать):
...
public class CustomObject
{
public string firstString;
public string secondString;
public CustomObject()
{
...
}
...
}
...
Предположим, что ObservableCollection
s имеет надлежащее содержание.
Мой вопрос: Как я могу правильно отобразить коллекцию? Вот критерии:
- На первой линии, будет TextBlock с текстом внутри него, что говорит «Sample Text»
- Далее идет кнопка с меткой «Command»
- Следующая строки (целых
ViewModelObservableCollection_String
элементов) являются TextBlocks. Его текст должен быть значением отдельного элементаViewModelObservableCollection_String
. - Следующие строки (целых
ViewModelObservableCollection_CustomObject
элементов) являются TextBoxes. Его текст должен быть значением отдельного элементаViewModelObservableCollection_CustomObject
(объединениеfirstString
иsecondString
).
Как вы можете видеть, содержимое StackPanel представляет собой слияние более чем одной коллекции с различными DataTemplate
.
Просьба уточнить, если что-то недостаточно ясно.
Спасибо. Не могли бы вы рассказать о нем больше? Я относительно новичок в WPF. – someone
Думаю, ваше второе предложение проще. Можете ли вы представить пример кода? Если нет, пожалуйста, дайте мне несколько ссылок. – someone