2015-05-07 20 views
6

Daha önce bazı cevaplar gördüm ama hiçbir şey gerçekten bana yardımcı olmadı.Veriye bağlı değere bağlı olarak arka plan rengini ayarla

Ben de var bir sınıf DecideModel (Bu bir veri kümesi DB'den alınır, ancak bu sorunun amacına ben bir ObservableCollection eklemiş) Benim XAML kodunda

static DecideModel() 
    { 
     All = new ObservableCollection<DecideModel> 
     { 
      new DecideModel 
      { 
       DatePerformed = new DateTime(2015, 4, 06), 
       Result = "Maybe" 
      }, 
      new DecideModel 
      { 
       DatePerformed = new DateTime(2015, 4, 05), 
       Result = "No" 
      }, 
      new DecideModel 
      { 
       DatePerformed = new DateTime(2015, 4, 04), 
       Result = "Yes" 
      } 
     }; 
    } 

    public DateTime DatePerformed { set; get; } 

    public string Result { set; get; } 

    public static IList<DecideModel> All { set; get; } 
} 

içeren ben

var
<ContentPage.Resources> 
    <ResourceDictionary> 
     <Color x:Key="Maybe">#ffddbc21</Color> 
     <Color x:Key="Yes">#3CB371</Color> 
     <Color x:Key="No">#B22222</Color> 
     <Color x:Key="Depends">#ffd78800</Color> 
    </ResourceDictionary> 
</ContentPage.Resources> 

<Label Text="{Binding Result}" HorizontalOptions="FillAndExpand" BackgroundColor="{StaticResource {BindingSource Result}}" /> 

Nesneden elde ettiğim sonuca göre etiketin arka plan rengini dinamik olarak ayarlamaya çalışıyorum.

Nasıl yapılacağı konusunda herhangi bir fikriniz varsa lütfen bana bildirin. Mevcut herhangi bir kullanışlı seçenek arıyorum.

cevap

10

Muhtemelen ihtiyacınız olan bir ValueConverter. Şimdi ne yapıyorsunuz, arka plan rengini 'Belki', 'Hayır' veya 'Evet' olarak ayarlıyor, ki bu açıkça bir renk değil.

Yapmanız gereken şey bu değeri bir renge dönüştürmektir. Bunu böyle yapabilirsin.

IValueConverter arabirimini uygulayan yeni bir sınıf oluşturun. senin sizi bağlayıcı Şimdi

<ContentPage.Resources> 
    <!-- Add this line below --> 
    <local:YesNoToBooleanConverter x:Key="YesNoMaybeToColorConverter" /> 
    <!-- You can remove the underneath --> 
    <!--<ResourceDictionary> 
     <Color x:Key="Maybe">#ffddbc21</Color> 
     <Color x:Key="Yes">#3CB371</Color> 
     <Color x:Key="No">#B22222</Color> 
     <Color x:Key="Depends">#ffd78800</Color> 
    </ResourceDictionary>--> 
</ContentPage.Resources> 

neyi dönüştürücü kullanmak için onu anlatmak zorunda:

public class YesNoMaybeToColorConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
      switch(value.ToString().ToLower()) 
      { 
        case "yes": 
         return Color.Green; 
        case "no": 
         return Color.Red; 
        case "maybe": 
         return Color.Orange; 
      } 

      return Color.Gray; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
      // You probably don't need this, this is used to convert the other way around 
      // so from color to yes no or maybe 
      throw new NotImplementedException(); 
    } 
} 

Sonra bu gibi XAML sayfasına statik kaynak olarak bu sınıfı ekleyin: Muhtemelen bu gibi bir şey olacaktır . Bu şekilde yapın:

<Label Text="{Binding Result}" HorizontalOptions="FillAndExpand" BackgroundColor="{Binding Result, Converter={StaticResource YesNoMaybeToColorConverter}}" /> 

Artık, Result alanındaki değeri bkz tanımladığınız dönüştürücü aracılığıyla koydu ve bu değere karşılık rengi dönmelidir.

+0

Bunun için teşekkürler! – rkc88