Silverlight, как составить список UserControl (в ContentControl?) - PullRequest
1 голос
/ 18 января 2011

Я бился об этом в последние часы ...

У меня есть пользовательский элемент управления с именем "DayItem", и я хочу показать его 48 раз в другом пользовательском элементе управления, который называется "DayPanel».Позвольте мне упомянуть, что это сделано в стиле MVVM, но я только испытываю, и прямой ответ будет в порядке для ответа.

У меня есть ObservableCollection<DayItem> в модели DayPanel и вXaml есть <ItemsPresenter />.

, если я сделаю

this.ItemsSource = DayItems;

все будет хорошо.но я хочу иметь возможность использовать эти DayItems в пользовательском интерфейсе как список ... для поддержки множественного выбора и т. д.

, поэтому я попытался использовать ContentControl и установить его содержимое на ObservableCollection.но он просто показывает текст ToString объекта ObservableCollection.поэтому я думаю, мне нужен DataTemplete там ... но зачем мне DataTemple, чтобы показать элемент управления?он уже оформлен в своем собственном Xaml, я не хочу повторять это снова.

или, может быть, я совершенно не прав, в любом случае мне нужна помощь: x

Редактировать:

Я заставил это работать, сказав, что DataType не был необходим или даже невозможен.и в коде позади я сказал списку, что это ItemSource был ObservableCollection.

Теперь я столкнулся с другими проблемами ... Связанные ListBox ... Есть пробелы между каждым элементом управления в ListBox, которыйпортит макет, а также мне нужно найти способ выбрать несколько элементов, перетаскивая ...

спасибо за помощь, такая жирная

Ответы [ 2 ]

2 голосов
/ 18 января 2011

Во-первых, вам нужна модель представления для пользовательского элемента управления DayItem. Давайте назовем это DayItemViewModel. Кроме того, я полагаю, у вас в DayPanel также есть модель представления, называемая чем-то вроде DayPanelViewModel. Затем вы, DayPanelViewModel, представите коллекцию экземпляров DayItemViewModel:

public class DayPanelViewModel
{
    public ObservableCollection<DayItemViewModel> DayItems { get; set; }
}

Затем в вашем DayPanel.xaml:

<UserControl x:Class="DayPanel"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <UserControl.Resources>
        <DataTemplate x:Key="DayItemTemplate"
                      DataType="{x:Type my:DayItemViewModel}">
            <my:DayItem />
        </DataTemplate>
    </UserControl.Resources>
    <Grid>
        <ListBox ItemsSource="{Binding DayItems}" 
                 ItemTemplate="{StaticResource DayItemTemplate}" />
    </Grid>
</UserControl>
0 голосов
/ 18 января 2011

Попробуйте использовать ListBox, так как он реализует множественный выбор ... Также было бы целесообразно (для MVVM), если вы не содержали DayItems, но DayItemModel в вашем DayPanelModel, и установите ItemTemplate ListBox для представления каждого DayItemModel с DayItem.1001 *

...