2013-07-01 2 views
0

ItemsControl에 항목을 추가하는 데 문제가 있습니다. 이 내 XAML 페이지입니다 : 내가 그 안에 이벤트가 뒤에 내 코드에서ItemsControl에 동적으로 항목 추가

<ScrollViewer Grid.Row="4"> 
    <ItemsControl Name="items"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
        <StackPanel Name="ContentControl"> 
         <Canvas Name="canvas1" Height="60" VerticalAlignment="Top"> 
          <TextBlock Text="{Binding RecordedTime}" Canvas.Left="10" Canvas.Top="7" Width="370" FontSize="36"/> 
          <Controls:RoundButton Name="save" Canvas.Left="380" Height="58" Canvas.Top="6" /> 
         </Canvas> 
        </StackPanel> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</ScrollViewer> 

.

records.Add(new item { Item = date.Now.ToString() }); 

     items.ItemsSource = records; 

모든 변수는 이미 정의되어 있습니다.

문제는 이벤트가 여러 번 트리거 될 때 처음에만 ItemsControl에 추가되고 다른 이벤트는 나타나지 않는다는 점입니다. 누구는 문제가 어디 있는지 알고 있습니까?

+0

어떤 이벤트 : 당신은 InitializeComponents 방법을 호출 한 후, 페이지의 생성자에서 예를 들어 그렇게 할 수 있습니까? 그것은 언제 시작됩니까? '레코드 '타입은 무엇이며 어디에 정의되어 있습니까? – PoweredByOrange

답변

2

recordsObservableCollection으로 선언해야합니다. 목록 상자의 ItemsSource 속성에 한 번만 지정하고 컬렉션 만 사용하십시오.

public ObservableCollection<item> Records { get; set; } 

// Constructor 
public Page3() 
{ 
    InitializeComponent(); 

    this.Records = new ObservableCollection<item>(); 

    this.items.ItemsSource = this.Records; 
} 

public void AddItem() 
{ 
    // Thanks to the ObservableCollection, 
    // the listbox is notified that you're adding a new item to the source collection, 
    // and will automatically refresh its contents 
    this.Records.Add(new item { Item = DateTime.Now.ToString() }); 
} 
+0

고맙습니다. 그것은 아주 잘 작동합니다. 그러나 ObservableCollection과이 문제의 목록 (내가 내 메서드에서 List를 사용했기 때문에)과 왜 그것을 생성자의 Itemsource에 할당했는지, 그리고 두 메서드 모두에서 메서드를 제공하지 않는다고 설명해 주시겠습니까? 동일한 리졸버. 도움을 주셔서 대단히 감사합니다. –

+0

'ObservableCollection'은 알림 메커니즘이있는 목록입니다. 고전적인리스트를 사용한다면,'ItemsControl'은 콜렉션에 새로운 원소를 추가했다는 것을 알 수 없습니다 (수동으로 말하지 않는 한). 한 번만해야하기 때문에 생성자에서'ItemsSource' 속성을 설정하고 있습니다. 그것은 어디에도있을 수 있습니다. 단지 생성자가 무언가가 한 번만 실행되도록하는 편리한 장소라는 것입니다. –

+0

오키 이해합니다. 대단히 감사합니다. –