2016-06-03 6 views
4

으로 구성된 ObservableCollection에 바인딩 된 ListView이 있습니다.Xamarin Forms ListView ObservableCollection이 업데이트되지 않음

<ListView x:Name="MyList" ItemsSource="{Binding MyList}"> 
    <ListView.ItemTemplate> 
    <DataTemplate> 
     <ViewCell> 
     <StackLayout> 
      <Label Text="{Binding Name" FontSize="Small"/> 
      <StackLayout Spacing="20"> 
      <Entry Text="{Binding Id}"/> 
      <Button Text="Create Profile" IsEnabled="False"> 
       <Button.Triggers> 
       <DataTrigger TargetType="Button" Binding="{Binding HasId}" Value="True"> 
        <Setter Property="IsEnabled" Value="True"/> 
       </DataTrigger> 
       </Button.Triggers> 
      </Button> 
      </StackLayout> 
     </StackLayout> 
     </ViewCell> 
    </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

이 결과 원하는 : 사용자가 입력 항목으로 (Id에 바인더 제본)하면, 버튼이 활성화되어야하는 프론트 엔드 XAML에서

public string Id{ get; set; } 
public string Name{ get; set; } 
public bool HasId 
{ 
    get { return !(String.IsNullOrEmpty(Id)); } 
} 

:

뷰 모델은 다음과 같다 .

실제 결과 : 나는/추가 할 때 /로부터 요소를 삭제 : 항목에 사용자가 입력, 아무 반응이 없을 때

주 (나는 viewmodel 내에서 변경이 표시되지 않는 ObservableCollection의 원인이 추측하고있어) ObservableCollection이면보기가 (예상대로) 업데이트됩니다.

모든 제안/아이디어를 높이 평가합니다.

+0

ViewModel 클래스는 INotifyPropertyChanged를 구현해야합니다. – Jason

+0

@ Jason thanks! 처음으로 설명서를 읽었을 때 이해가되지 않았지만 이제는 의미가 있습니다. – indubitablee

답변

6

당신은 뷰 모델 클래스에 INotifyPropertyChanged를 구현해야합니다.

ObservableCollection<T> 클래스는 컬렉션 자체가 있는지 여부에 대한 통지를 처리 변경됨 - 그것 ems 추가/제거/etc. 개별 항목 자체의 속성이 변경되는 경우 알림을 처리하지 않습니다.

0

항목이 OnTextChanged (버튼을 활성화하는 데 사용할 수있는 그런 뭔가라는 이벤트 이름을 가지고,이 XAML 또는 코드 숨김에서 수행 할 수 있습니다.

을 목록보기의 관해서는 갱신되지는 않은 당신은보기 모델의 OnPropertyChanged를 이벤트를 트리거하는? 다시 "myList에"ObservableCollection에를 설정하려고?

관련 문제