2016-05-23 3 views
0

Я хочу отобразить «Установить изображение» перед «Установить имя» в ComboBox, но API, который я использую для извлечения данных, не дает мне URL-адреса, чтобы получить изображение от этого я должен создать это самостоятельно. она тем не менее обеспечивает gatherercode, который все мне нужно, чтобы получить правильное изображение, как это:Получить привязки данных из двух разных мест

Public string SetImageUrl = String.Format("http://gatherer.wizards.com/Handlers/Image.ashx?type=symbol&set={0}&size={1}&rarity={2}", sets.gatherercode, setImageSize, setImageRarity) 

, но как я могу связать SetImageUrl к источнику изображения, если он находится в MainPage.xaml.cs, когда я установил ItemSource к MagicSets и DataType в другое пространство имен (appName.Api вместо appName). или как я могу создать свое собственное:

[DataMember(Name = "setImageUrl")] 
public string setImageUrl{ get; set; } 

Это принимает все значения как приведенную выше строку.

Результат кода, который я теперь я, чтобы получить выпадающий, что есть элемент для каждого набора в комплекте, который имеет textblox, который отображает set.name

XAML код

 <StackPanel Orientation="Horizontal"> 
      <ComboBox Name="SetComboBox" ItemsSource="{x:Bind MagicSets}"> 
       <ComboBox.ItemTemplate> 
        <DataTemplate x:DataType="data:Set"> 
         <StackPanel Orientation="Horizontal"> 
          <Image source="{Binding imageUrl}"/> 
          <TextBlock Text="{x:Bind name}"/> 
         </Stackpanel> 
        </DataTemplate> 
       </ComboBox.ItemTemplate> 
      </ComboBox> 
     </StackPanel> 

SetDataWrapper Код

[DataContract] 
public class Set 
{ 
    [DataMember(Name = "code")] 
    public string code { get; set; } 
    [DataMember(Name = "name")] 
    public string name { get; set; } 
    [DataMember(Name = "type")] 
    public string type { get; set; } 
    [DataMember(Name = "border")] 
    public string border { get; set; } 
    [DataMember(Name = "mkm_id")] 
    public int mkm_id { get; set; } 
    [DataMember(Name = "booster")] 
    public IList<object> booster { get; set; } 
    [DataMember(Name = "mkm_name")] 
    public string mkm_name { get; set; } 
    [DataMember(Name = "releaseDate")] 
    public string releaseDate { get; set; } 
    [DataMember(Name = "gathererCode")] 
    public string gathererCode { get; set; } 
    [DataMember(Name = "magicCardsInfoCode")] 
    public string magicCardsInfoCode { get; set; } 
    [DataMember(Name = "block")] 
    public string block { get; set; } 
    [DataMember(Name = "oldCode")] 
    public string oldCode { get; set; } 
    [DataMember(Name = "onlineOnly")] 
    public bool? onlineOnly { get; set; } 
} 

[DataContract] 
public class SetDataWrapper 
{ 
    [DataMember(Name = "sets")] 
    public IList<Set> sets { get; set; } 
} 

}

Главная страница Код

 public ObservableCollection<Card> MagicCards { get; set; } 
    public ObservableCollection<Set> MagicSets { get; set; } 
    public MainPage() 
    { 
     this.InitializeComponent(); 

     MagicCards = new ObservableCollection<Card>(); 
     MagicSets = new ObservableCollection<Set>(); 
    } 
    private async void Page_Loaded(object sender, RoutedEventArgs e) 
    { 
     ProgressRingToggle(true); 
     await MagicFacade.PopulateMagicCardsAsync(MagicCards); 
     await MagicFacade.PopulateMagicSetsAsync(MagicSets); 
     ProgressRingToggle(false); 
    } 

ответ

1

, как я могу создать свой собственный: [DataMember (Name = "setImageUrl")] общественности строка setImageUrl {получить; задавать; } Это принимает все значения как приведенную выше строку.

Вы можете добавить конструктор в свой класс Set. И в конструкторе, чтобы установить параметр setImageUrl следующим образом:

[DataContract] 
public class Set 
{ 
    public Set(string ImageSize, string setImageRarity) 
    { 
     setImageUrl = String.Format("http://gatherer.wizards.com/Handlers/Image.ashx?type=symbol&set={0}&size={1}&rarity={2}", gathererCode, ImageSize, setImageRarity); 
    } 
    [DataMember(Name = "setImageUrl")] 
    public string setImageUrl { get; set; } 
    [DataMember(Name = "code")] 
    public string code { get; set; } 
    [DataMember(Name = "name")] 
    public string name { get; set; } 
    [DataMember(Name = "type")] 
    ... 

Установите ImageSize и setImageRarity при создании экземпляра класса, как следует:

MagicSets = new ObservableCollection<Set>() { 
    new Set("medium","Rarity1"){name="suntest1",gathererCode="code"}, 
    new Set("medium","Rarity2"){name="suntest2",gathererCode="code"} 
}; 

После этого, вы можете привязать setImageUrl же как name ,

<ComboBox.ItemTemplate> 
    <DataTemplate x:DataType="local:Set"> 
     <StackPanel Orientation="Horizontal"> 
      <Image Source="{x:Bind setImageUrl}"/> 
      <TextBlock Text="{x:Bind name}"/> 
     </StackPanel> 
    </DataTemplate> 
</ComboBox.ItemTemplate> 
Смежные вопросы