2014-04-15 4 views
1

최근 바인딩에서 두 번째 단순화 된 메서드는 두 번째 단순화 된 메서드와 마찬가지로 잘 작동한다는 것을 알았습니다. 처음부터 항상 사용했기 때문에 무엇을 선택해야하는지 알기를 원합니다. 당신은 완전히 새로운로 DiscoveredDevicesList 속성을 설정하면, 자동 구현 속성을 사용자동 구현 속성 대. 바인딩의 공용 속성

더미 개인 변수

Public 메서드

public ObservableCollection<MyDeviceInfo> DiscoveredDevicesList 
{ 
    get 
    { 
     return _DiscoveredDevicesList; 
    } 
    set 
    { 
     _DiscoveredDevicesList = value; 
     OnPropertyChanged("DiscoveredDevicesList"); 
    } 
} 
private ObservableCollection<MyDeviceInfo> _DiscoveredDevicesList; 

자동 구현 속성

public ObservableCollection<MyDeviceInfo> DiscoveredDevicesList { get; set; } 
+1

컬렉션을 새 컬렉션으로 바꿀 때 두 번째 버전도 사용할 수 있습니까? 그 이후로 둘 사이의 차이점이 있습니다. 컬렉션의 * contents *에 대한 UI (또는 다른 것)를 최신으로 유지하기 위해 바인딩을 사용하는 경우 둘 다 작동합니다. – Maarten

+0

이것은 매우 흥미로운 점입니다. 그러나 나는 여기서 약간의 정리가 필요하다. "새 컬렉션으로 교체"라고 말하면 정확히 무엇을 의미합니까? 두 번째 문장과 관련하여 UI를 최신 상태로 유지하기위한 바인딩의 목적이 아닌가? – Mehrad

답변

1

주로 ObservableCollection<T> 속성을 나타냅니다. Public method with a dummy Private variable 예를 들어, XAML을 통해 DataContext를 지정해야합니다 : 컬렉션

ObservableCollection<T>

public class ViewModel : NotificationObject 
{ 
    private ObservableCollection<Person> _myCollection; 

    public ObservableCollection<Person> MyCollection 
    { 
     get 
     { 
      return _myCollection; 
     } 

     set 
     { 
      _myCollection = value; 
      NotifyPropertyChanged("MyCollection"); 
     } 
    } 
} 

XAML

<!-- Set the DataContext in XAML --> 
<Window.DataContext> 
    <local:ViewModel /> 
</Window.DataContext> 

<Grid> 
    <ListBox ItemsSource="{Binding Path=MyCollection}" /> <!-- Or any other control --> 
</Grid> 

일을 코드 숨김이 같은 :

ViewModel MyViewModel = this.DataContext as ViewModel; 

MyViewModel.MyCollection = new ObservableCollection<Person>(); 

MyViewModel.MyCollection.Add(new Person() 
{ 
    Age = 22, 
    Name = "Nick", 
}); 

이 경우 컬렉션이 자동 속성 :

public ObservableCollection<Person> MyCollection 
{ 
    get; 
    set; 
} 

그런 다음 Binding은 즉이 속성 모음을 업데이트 할 것, 작동하지 않을 것입니다. 사용자가 설정 한 경우에, 코드 숨김에서 DataContext는 :

this.DataContext = MyViewModel; 

Binding 자동 속성을 사용하여 작동합니다.

1

ObservableCollection,보기에는 알 수있는 방법이 없습니다. 그러나 ObservableCollection의 단일 인스턴스에서 항목을 추가/제거/재정렬하는 경우에는 DiscoveredDevicesListINotifyCollectionChanged 인터페이스 (ObservableCollection으로 구현 됨)에 바인딩되기 때문에 정상적으로 작동합니다.

1

자동 속성을 바인딩 할 수 있지만 코드의 속성에 대한 변경 사항은 UI에 표시되지 않습니다. 일반적으로 데이터 바인딩에 사용되는 모든 객체는 변경 알림을 포함해야하므로 자동 속성을 사용하면 안됩니다.

+0

그는 ObservableCollection 을 사용하고 있습니다. 따라서 당신이 말하는 것은 직접적으로 사실이 아닙니다. – flindeberg