2010-08-23 6 views
0

개체 목록이 있고 표시 용으로 사용자 지정 컨트롤 목록에 바인딩하고 싶습니다.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 개체가 내 데이터 개체로 설정되지 않은 이유는 무엇입니까?

감사합니다.

답변

0

어떻게 작동하는지 모르지만 실제로 데이터 객체에 바인딩 된 제 컨트롤을 얻으려면 아무 것도 필요하지 않습니다. 속성 매핑은 일반적인 바인딩으로 수행됩니다.

<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> 

이 설명을 이해할 수 있습니다. 미리 노력해 주셔서 감사합니다!

+0

설명 원래 데이터 개체 바인딩이 'MyCustomList'클래스의 'PrepareContainerForItemOverride'메서드에서 설정되도록 제어했습니다. 하지만 실제로는 나중에 수행되며이 경우에는 일반적인 바인딩이 적용됩니다. – Budda

관련 문제