개체 목록이 있고 표시 용으로 사용자 지정 컨트롤 목록에 바인딩하고 싶습니다.Silverlight 4 : 사용자 지정 목록에서 컨트롤의 속성을 설정하는 방법
XAML 코드 : 'MyItemsContol'의
<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 >
소스 코드 : 다른 주제에서
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);
}
}
}
. 여기서는 내 객체의 위치 속성을 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 : FieldItem의 DataContext 개체가 내 데이터 개체로 설정되지 않은 이유는 무엇입니까?
감사합니다.
설명 원래 데이터 개체 바인딩이 'MyCustomList'클래스의 'PrepareContainerForItemOverride'메서드에서 설정되도록 제어했습니다. 하지만 실제로는 나중에 수행되며이 경우에는 일반적인 바인딩이 적용됩니다. – Budda