2017-10-02 1 views
0
<ListView x:Name="PictureListView" HasUnevenRows="True" WidthRequest="320" HeightRequest="400" SeparatorColor="White"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <ViewCell> 
       <Image Source="{Binding Path}" HeightRequest="80" WidthRequest="80" Aspect="AspectFill" /> 
      </ViewCell> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

ObservableCollection<Image> Pictures = new ObservableCollection<Image>(new Image { Source = "file.png" }); 
PictureListView.ItemSource = Pictures; 

    private async void PictureListView_ItemTapped(object sender, ItemTappedEventArgs e) 
{ 
    var photo = (Image)e.Item; 
photo.Source = "file2.png"; 
} 

xamarin 양식을 사용하여 listview에서 이미지를 업데이트하려고합니다 .... 위에 나열된 코드가 있습니다 ....하지만 클릭이 발생하면 새 이미지 ("file2.png")가 표시되지 않습니다. 화면에 다시 칠해진다. 대신, 나는 그 이미지가있는 곳을위한 빈 공간 일뿐입니다. 어떻게하면 목록보기에서 이미지를 바꿀 수 있습니까?Xamarin 양식, 어떻게하면 목록보기에서 이미지를 새로 고 칩니 까?

답변

0

ObservableCollection을 사용하면 컬렉션이 업데이트 될 때 목록보기 만 업데이트됩니다 (추가, 이동, 제거). 귀하의 경우 항목의 내용 만 업데이트하므로 화면에 반영되지 않습니다.

적절한 데이터 바인딩 또는 MVVM을 사용하여 코드를 구현해야합니다. MVVM HERE에 대해 자세히 알아보십시오.

MVVM을 구현하지 않으려는 경우 다음 트릭을 사용할 수 있습니다.

private async void PictureListView_ItemTapped(object sender, ItemTappedEventArgs e) 
{ 
    var photo = (Image)e.Item; 
    var newImage = new Image { Source = "file2.png" }; 
    var index = Pictures.IndexOf(photo); 
    Pictures.Remove(photo); 
    Pictures.Insert(index, newImage); 
} 
당신은 샘플 코드

using System; 
using System.ComponentModel; 
using Xamarin.Forms; 

namespace XamlSamples 
{ 
    class ClockViewModel : INotifyPropertyChanged 
    { 
     DateTime dateTime; 

     public event PropertyChangedEventHandler PropertyChanged; 

     public ClockViewModel() 
     { 
      this.DateTime = DateTime.Now; 

      Device.StartTimer(TimeSpan.FromSeconds(1),() => 
       { 
        this.DateTime = DateTime.Now; 
        return true; 
       }); 
     } 

     public DateTime DateTime 
     { 
      set 
      { 
       if (dateTime != value) 
       { 
        dateTime = value; 

        if (PropertyChanged != null) 
        { 
         PropertyChanged(this, 
          new PropertyChangedEventArgs("DateTime")); 
        } 
       } 
      } 
      get 
      { 
       return dateTime; 
      } 
     } 
    } 
} 
다음

몇 가지 문서를 여기

에서 INotifyPropertyChanged

를 구현해야
관련 문제