2017-12-26 22 views
0

MVVM의 내 xamarin.Forms 응용 프로그램에 문제가 있습니다. ListView가 있고 ItemTemplate에 이미지를 표시하려고합니다. 나는이 네임 스페이스로 "이미지"로 설정 한 게다가ListView Xamarin.forms가 ImageResource를 사용하여 ItemSource에서 이미지를 동적으로로드합니다.

<ListView ItemsSource="{Binding Series}"> 
       <ListView.ItemTemplate> 
        <DataTemplate> 
         <ViewCell> 
          <Grid> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="20"/> 
            <ColumnDefinition Width="*"/> 
           </Grid.ColumnDefinitions> 
           <StackLayout Orientation="Horizontal"> 
            <Image Source="{images:ImageResource image.jpg}"/> 
           </StackLayout> 
           <Label Grid.Column="1" Text="{Binding Name}" Style="{StaticResource UsualLabelTemplate}" /> 
          </Grid> 
         </ViewCell> 
        </DataTemplate> 
       </ListView.ItemTemplate> 
      </ListView> 

: XMLNS : 이미지 = "CLR 여기

[ContentProperty("Source")] 
public class ImageResourceExtension : IMarkupExtension 
{ 
    public string Source { get; set; } 

    public object ProvideValue(IServiceProvider serviceProvider) 
    { 
     if (Source == null) 
     { 
      return null; 
     } 

     var imageSource = ImageSource.FromResource($"CoPro.Assets.{Source}"); 

     return imageSource; 
    } 
} 

내 ListView에의 XAML이다 : 나는 ImageRessource 클래스를 생성해야 할 일 -namespace : CoPro.Assets "

이와 같이 ListView는 모든"시리즈 "항목에 대해 동일한 그림을 표시합니다. 각 항목에는 이미지의 경로가있는 문자열 속성이 있습니다. 각 항목의 이미지를 어떻게 표시 할 수 있습니까?

미리 도움을 주셔서 감사합니다.

+0

왜 FileImageSource를 직접 사용하지 않습니까? –

답변

0

방금 ​​해결책을 찾았습니다.

<ListView Grid.Row="1" x:Name="MainListView" ItemsSource="{Binding Series}"> 
        <ListView.ItemTemplate> 
         <DataTemplate> 
          <ViewCell> 
           <ViewCell.View> 
            <Grid> 
             <Grid.ColumnDefinitions> 
              <ColumnDefinition Width="60"/> 
              <ColumnDefinition Width="*"/> 
             </Grid.ColumnDefinitions>           
             <Image Source="{Binding ImageUrl, Converter={StaticResource StringToImageSourceConverter}}" 
               Aspect="AspectFill" 
               /> 
             <Label Grid.Column="1" Text="{Binding Name}" Style="{StaticResource UsualLabelTemplate}" /> 
            </Grid> 
           </ViewCell.View> 
          </ViewCell> 
         </DataTemplate> 
        </ListView.ItemTemplate> 
       </ListView> 

해결 방법은 변환기를 사용하고 소스 속성에는 문자열이 포함되어 있습니다. 이 문자열은 다음과 같이 내 계산기에 매개 변수로 전송됩니다.

이 코드 "$"CoPro.Assets에서
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value != null) 
     { 
      return ImageSource.FromResource($"CoPro.Assets.{value}"); 
     } 
     else 
     { 
      return null; 
     } 
    } 

는 "내 이미지 파일의 경로입니다

감사를 도와