Silverlight 4: как настроить свойства элемента управления в пользовательском списке - PullRequest
0 голосов
/ 23 августа 2010

У меня есть список объектов, и я хочу привязать его для отображения к списку пользовательских элементов управления.

XAML код:

                <Pages:MyItemsControl ItemsSource="{Binding SquadFieldPlayers}">
                    <Pages:MyItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <Canvas Height="180" Width="169" />
                        </ItemsPanelTemplate>
                    </Pages:MyItemsControl.ItemsPanel>
                    <Pages:MyItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Pages:FieldItem />
                        </DataTemplate>
                    </Pages:MyItemsControl.ItemTemplate>
                </Pages:MyItemsControl >

Исходный код MyItemsContol:

    public class MyItemsControl : ItemsControl
{
    protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
    {
        FrameworkElement contentitem = element as FrameworkElement;
        if (contentitem != null)
        {
            Binding leftBinding = new Binding("PositionX");
            Binding topBinding = new Binding("PositionY");
            contentitem.SetBinding(Canvas.LeftProperty, leftBinding);
            contentitem.SetBinding(Canvas.TopProperty, topBinding);
            base.PrepareContainerForItemOverride(element, item);             
        }
    }
}

В другой теме. Здесь я привязал свойства position моего объекта к свойствам Left и Top (чтобы они отображались в нужном месте на холсте).

Вопрос1: как я могу настроить другое свойство элемента управления FieldItem (у меня есть textBlock внутри и я хочу, чтобы он отображал другие элементы данных из объектов данных)?

Вот мой элемент управления FieldItem:

<UserControl x:Class="VfmElitaSilverlightClientView.Pages.FieldItem" ...>    
<Grid Height="16" Width="16">
    <Ellipse Fill="Yellow" Height="16" Width="16">
    </Ellipse>
    <TextBlock Name="TeamNumberTextBlock" Text="22" TextAlignment="Center" FontStyle="Italic" />
</Grid>

и я хочу заполнить TeamNuberTextBlock значимыми данными.

Вопрос2: почему объект DataContext из FieldItem не установлен для моего объекта данных?

Спасибо!

1 Ответ

0 голосов
/ 24 августа 2010

Я не знаю, как это работает, но для привязки моего контроля к объекту данных на самом деле ничего не требуется.Сопоставление свойств выполняется с обычной привязкой:

<UserControl x:Class="VfmElitaSilverlightClientView.Pages.FieldItem" ...>    
<Grid Height="16" Width="16">
    <Ellipse Fill="Yellow" Height="16" Width="16">
    </Ellipse>
    <TextBlock Name="TeamNumberTextBlock" Text="**{Binding TeamNumber}**"
               TextAlignment="Center" FontStyle="Italic" />
</Grid>

Я буду признателен за объяснения этого.Заранее благодарим вас за старания!

...