2014-10-02 2 views
0

저는 C#과 xaml을 처음 사용합니다. 아래의 한 가지 방법과 다른 방법은 작동하지 않습니다. 그들은 둘 다 ObservableCollection을 반환하는 것과 똑같이 보입니다. 다른 사람들이 이러한 기능에 사용 된 용어 나 용어를 알려주는 경우이를 찾아 볼 수도 있습니다. 미리 감사드립니다.xaml 바인딩 - 기능 차이

//This one works when binded with xaml and displays the 

     public ObservableCollection<Emp> Items 
     { 
      get 
      { 

       collection.Add(new Emp { Name = "Emp1", Age = 21 }); 
       collection.Add(new Emp { Name = "Emp2", Age = 22 }); 
       return collection; 

      } 
     } 

//This one does not work 

    public ObservableCollection<Emp> collection = new ObservableCollection<Emp>(); 
      public ObservableCollection<Emp> Items() 
      { 


       collection.Add(new Emp { Name = "Emp1", Age = 21 }); 
       collection.Add(new Emp { Name = "Emp2", Age = 22 }); 
       return collection; 
      } 



    <!-- XAML CODE --> 
    <Grid> 
     <ListBox Margin="20" ItemsSource="{Binding Items}"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="{Binding Path=Name}" /> 
         <TextBlock Text="{Binding Path=Age}" /> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
    </Grid> 

답변

1

첫 번째 것은 UI의 컨트롤에 바인딩되는 속성입니다. 응용 프로그램이 시작되면 해당 속성의 getter 메서드가 자동으로 실행되어 컬렉션을 반환합니다.

두 번째 것은 메서드 (속성 아님)이며 코드의 어딘가에서 호출하지 않으면 자동으로 실행되지 않습니다. 그래서 2 위가 효과가없는 이유입니다.

2

속성 만 XAML에 바인딩 할 수 있으며 첫 번째 "메서드"는 속성 일 수 있습니다. 가져 오기 섹션에서 통화 추가를 제거하십시오. 그렇지 않으면 콜렉션에 동일한 항목이 계속 추가됩니다.

http://csharp.net-tutorials.com/csharp-3.0/automatic-properties/ 또한 자동 속성을 확인하십시오.

변경 될 바인딩 속성은 INotifyPropertyChanged를 구현해야합니다. 그렇지 않으면 XAML에서 바인딩을 업데이트해야한다는 것을 알지 못합니다. http://msdn.microsoft.com/en-us/library/vstudio/ms229614%28v=vs.100%29.aspx

멋진 트릭은 [CallerMemberName] 속성을 사용하는 것이므로 매번 매개 변수로 속성 이름을 지정할 필요가 없습니다.

protected void OnPropertyChanged([CallerMemberName] string name = null) 
     { 
      PropertyChangedEventHandler handler = PropertyChanged; 
      if (handler != null) 
      { 
       handler(this, new PropertyChangedEventArgs(name)); 
      } 
     } 
+0

둘 다 감사합니다! – Ozland