2014-06-17 3 views
0

데이터 템플릿이 있고 목록 상자에 적용하려고하면 템플릿에 텍스트 상자, 레이블 및 단추가 있지만 목록 상자에 나타나지 않습니다. 아직 데이터 바인딩을 가지고 있지만 여전히 텍스트 상자, 라벨, 단추를 표시해야하지만이 게재 밤은 여기 내 목록 상자목록 상자에 데이터 템플릿을 적용하는 방법

를위한이 자원

<Window.Resources> 
      <DataTemplate x:Key="tasktemplate1"> 
       <Canvas Height="50" Width="850" Background="lightgray"> 
        <Label Height="30" Width="170" Canvas.Top="10" Canvas.Left="150" Background="LightGray"> 
        </Label> 
        <TextBox Height="30" Width="60" Canvas.Top="10" Canvas.Left="370" Background="Black"></TextBox> 
        <Label Canvas.Left="500" Canvas.Top="10">$</Label> 
        <Button Click="deletebuttonclick" Canvas.Top="12" Height="10" Width="30" Canvas.Left="600" ></Button> 
       </Canvas> 
      </DataTemplate> 
     </Window.Resources> 

로 사용되는 DataTemplate을위한 코드와 코드는

<TabItem> 
     <Canvas Height="700" Width="850"> 
      <ListBox ItemTemplate="{StaticResource tasktemplate1}" ItemsSource="{Binding}" x:Name="listBox" Height="700" Width="850"> 
      </ListBox> 
      <Label Canvas.Top="-18" Canvas.Left="185">Select Task</Label> 
      <Label Canvas.Top="-18" Canvas.Left="377" RenderTransformOrigin="0.58,0.462">Enter Bill Rates</Label> 
      <Button Canvas.Left="39" Canvas.Top="575" Width="139">Click to add the task</Button> 
     </Canvas> 
    </TabItem> 

나는 잘못 가고있다? 어떤 도움, 고맙습니다

+0

목록 상자의 ItemsSource를 제대로 설정하지 않았기 때문에 목록에 항목이 없으므로 데이터 서식이 적용되지 않습니다. ItemSource를 항목 목록으로 설정하십시오. – Nitin

+0

bt 왜 빈 레이블과 텍스트 상자를 표시하지 않습니까? – Safwan

답변

1

DataTemplate은 listBoxItems의 시각적 레이아웃을 나타내는 데 사용됩니다. 그러나 ItemsSource 컬렉션이 null이거나 count가 0 인 경우 (이를 Binding으로 설정했기 때문에) listBox에 항목이 생성되어 표시되지 않습니다. 에 개체가있는 ItemsSource를에 전달해야 DataTemplate이 ListBoxItems에 적용됩니다. 당신이 XAML 자체에 ItemsSource를 정의 할 수 있습니다 테스트를 위해

: 나는 기본적으로 ItemsSource 등 10 개 항목의 정수 수집을 제공하는 위의 예제에서

<Canvas Height="700" Width="850"> 
    <Canvas.Resources> 
     <ObjectDataProvider x:Key="EnumerableRange" 
      xmlns:sys="clr-namespace:System;assembly=mscorlib" 
      xmlns:linq="clr-namespace:System.Linq;assembly=System.Core" 
      ObjectType="{x:Type linq:Enumerable}" MethodName="Range"> 
      <ObjectDataProvider.MethodParameters> 
       <sys:Int32>1</sys:Int32> 
       <sys:Int32>10</sys:Int32> 
      </ObjectDataProvider.MethodParameters> 
     </ObjectDataProvider> 
    </Canvas.Resources> 
    <ListBox ItemTemplate="{StaticResource tasktemplate1}" 
      ItemsSource="{Binding Source={StaticResource EnumerableRange}}" 
      x:Name="listBox" Height="700" Width="850"/> 
    ...... 
</Canvas> 

. 그래서, 당신은 그것에 대한 10 개의 템플릿을 볼 수 있습니다. 당신이 품목의 더 많은 것을보고 싶으면, 자원에있는 수에서 다른 어떤 가치에 가고 수시로 간다 EnumerableRange.

+0

만약 내가 그것을 원한다면, 그것은 XML 파일에 따라 다르다는 것을 의미한다. 이것은 일정한 양의 작업을 가지고 있는데, 11 개의 작업이 있다고 가정한다. – Safwan

+0

그래서 코드 뒤에 콜렉션을 만들고 listBox의 ItemsSource를 콜렉션으로 설정해야합니다. –

+0

나는 내 레이블에 그 beacause에 붙어있어, 나는 당신이 나를 도울 수 있다면, 작업을 표시하고 싶습니다. – Safwan

관련 문제