Имейте ListBox для отображения 2 разных ObservableCollection [duplicate]

Возможно, вам нужно проверить, что вы добавили новую активность в файл manifest.xml

Пример:

<activity
      android:name=".className" 
      android:label="@string/app_name" > 
</activity>
11
задан H.B. 24 February 2016 в 13:53
поделиться

2 ответа

Из-за проблемы с привязкой данных к CollectionContainer, как описано http://social.msdn.microsoft.com/Forums/vstudio/en-US/b15cbd9d-95aa-47c6-8068-7ae9f7dca88a/collectioncontainer -does-not-support-rootsource? forum = wpf Теперь я использую следующий подход:

<ListBox>
  <ListBox.Resources>
    <CollectionViewSource x:Key="DogCollection" Source="{Binding Dogs}"/>
    <CollectionViewSource x:Key="CatCollection" Source="{Binding Cats}"/>
  </ListBox.Resources>
  <ListBox.ItemsSource>
    <CompositeCollection>
      <CollectionContainer Collection="{Binding Source={StaticResource DogCollection}}"/>
      <CollectionContainer Collection="{Binding Source={StaticResource CatCollection}}"/>
    </CompositeCollection>
  </ListBox.ItemsSource>
  <!-- ... -->
</ListBox>

Изменить: класс CompositeCollection не получается из FrameworkElement и, следовательно, не имеет свойства DataContext для поддержки привязки данных. Он будет работать, только если вы используете Binding, предоставляя Source. Посмотрите здесь https://stackoverflow.com/a/6446923/1254795 для получения дополнительной информации.

34
ответ дан Community 16 August 2018 в 04:10
поделиться
  • 1
    Работайте отлично, спасибо – Pascal Piché 1 September 2014 в 06:11
  • 2
    Это отлично работает для меня. Но было бы более полезно, если бы вы могли объяснить why , что это необходимо. Я не понимаю: 1) почему я не могу объявить ресурс CollectionContainer таким же образом и использовать его напрямую, вместо того, чтобы коснуться через CollectionViewSource? и 2) , почему я не могу объявить CompositeCollection как ресурс и просто привязать к объектам CollectionContainer внутри напрямую? Что особенного в CollectionViewSource, что он работает здесь, даже если другие типы не будут? – Peter Duniho 23 February 2016 в 01:45

Попробуйте указать имя в ListBox и перечислите его DataContext в привязке:

   <ListBox x:Name="myList" ItemsSource="{DynamicResource MyColl}">
        <ListBox.Resources>
            <CompositeCollection x:Key="MyColl">

                 <CollectionContainer Collection="{Binding DataContext.Dogs, Source={x:Reference myList}}"/>
                <CollectionContainer Collection="{Binding DataContext.Cats, Source={x:Reference myList}}"/>
            </CompositeCollection>
        </ListBox.Resources>
    </ListBox>
4
ответ дан Nitin 16 August 2018 в 04:10
поделиться
  • 1
    Это не работает. Я получаю исключение, что имя ListBox не может быть разрешено. Я думаю, это связано с тем, что CompositeCollection объявлен внутри DataTemplate.Resources, а после ListBox объявлен. – Oliver 8 October 2013 в 10:07
  • 2
    просто предложение .. зачем вам нужна коллекция в ресурсах шаблонов .. можете ли вы переместить это в ресурсы ListBox? – Nitin 8 October 2013 в 10:08
  • 3
    Если я переместил CompositeCollection в ListBox.Resources, то как я могу ссылаться на него как ListBox.ItemsSource? – Oliver 8 October 2013 в 10:12
  • 4
    вместо использования StaticResource {DynamicResource MyColl} – Nitin 8 October 2013 в 10:22
  • 5
    он не даст циклическую ошибку в случае, если вы поместите коллекцию в свои ресурсы списка и используете dynamicresource для ее ссылки ... просто проверили это ... отлично работали .. обновили ответ с проверенным кодом – Nitin 8 October 2013 в 10:31
Другие вопросы по тегам:

Похожие вопросы: