2016-08-01 4 views
0

Попытка связать мою строку ImagePath с элементом изображения в списке с именем BusinessLineList через Image.Source и UriSource. Когда я жестко кодирую один путь изображения в XAML, он работает, но не привязан к свойству ImagePath.Привязать путь изображения к изображению в UWP ListView item

Вот модель:

public class BusinessLinesModel 

    { 
     public string ImagePath { get; } 
     public string ProductType { get; } 
     public int NumPending { get; } 
     public double DollarAmount { get; } 
     public int NumInforceYTD { get; } 
     public int ID { get; } 


     public BusinessLinesModel(int id, string imagePath, string productType, int numPending, double dollarAmount, int numInforceYTD) 
     { 
      ID = id; 
      ImagePath = imagePath; 
      ProductType = productType; 
      NumPending = numPending; 
      DollarAmount = dollarAmount; 
      NumInforceYTD = numInforceYTD; 
     } 

    } 

Вот код ViewModel:

private AgentsModel _selectedAgent; 
    public AgentsModel SelectedAgent 
    { 
     get { return _selectedAgent; } 
     set 
     { 

      _selectedAgent = value; 
      PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SelectedAgent))); 

      IsAgentSelected = Visibility.Visible; 
      PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IsAgentSelected))); 


      int i = SelectedAgent.ID; 

      BusinessLineList = new List<BusinessLinesModel>(); 

      BusinessLineList.Add(new BusinessLinesModel(i, "Assets/lifebuoy2.png", "Life", i * i + i, i * 83.22, i * 7 + 2)); 
      BusinessLineList.Add(new BusinessLinesModel(i, "Assets/get-money.png", "Annuities", i * i + i, i * 83.22, i * 7 + 2)); 
      BusinessLineList.Add(new BusinessLinesModel(i, "Assets/old-man-walking-with-a-crutch.png", "LTC", i * i + i, i * 83.22, i * 7 + 2)); 
      BusinessLineList.Add(new BusinessLinesModel(i, "Assets/wheelchair2.png", "Disability", i * i + i, i * 83.22, i * 7 + 2)); 
      BusinessLineList.Add(new BusinessLinesModel(i, "Assets/link-symbol.png", "Linked Benefit", i * i + i, i * 83.22, i * 7 + 2)); 

      PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(BusinessLineList))); 


      IsBusinessLineSelected = Visibility.Collapsed; 
      PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IsBusinessLineSelected))); 
     } 
    } 

Вот XAML:

      <ListView x:Name="listView1" ItemTemplate="{StaticResource CasesListModelTemplate}" ItemsSource="{Binding BusinessLineList}" SelectedItem="{Binding SelectedBusinessLine, Mode=TwoWay}" Visibility="{Binding IsAgentSelected, Mode=TwoWay}" ScrollViewer.VerticalScrollBarVisibility="Auto"/> 

И вот ItemTemplate в XAML:

<DataTemplate x:Key="CasesListModelTemplate"> 
     <Grid Margin="10" Width="290" Height="100" > 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"/> 
       <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 
      <Image Margin="0,10,0,0" d:LayoutOverrides="LeftPosition, RightPosition, TopPosition, BottomPosition" Width="75" Height="75" HorizontalAlignment="Center" VerticalAlignment="Top"> 
       <Image.Source> 
        <BitmapImage UriSource="{Binding ImagePath}"/> 
        <!--Hard-coding this in line above works: "Assets/lifebuoy2.png"--> 
       </Image.Source> 
      </Image> 
      <   </Grid> 
    </DataTemplate> 

ответ

1

Сначала добавьте ms-appx:/// как это

"ms-appx:///Assets/lifebuoy2.png" 

Во-вторых, вы можете настроить ImageSource непосредственно:

<Image Source="{Binding ImagePath}"/> 
+0

Спасибо - ваше первое предложение установил его! Не могли бы вы объяснить, что такое '' ms-appx: /// '' и есть? (Я не мог получить ваш второй ответ на работу.) –

+1

О 'ms-appx' вы можете найти больше информации [здесь] (https://msdn.microsoft.com/library/windows/apps/br242760) –

Смежные вопросы