2015-05-07 7 views
6

के आधार पर पृष्ठभूमि रंग सेट करें मैंने पहले कुछ जवाब देखा है लेकिन कुछ भी वास्तव में मेरी मदद नहीं करता है।डेटा-बाउंड मान

मैं भी एक वर्ग DecideModel (यह एक डाटासेट डीबी से प्राप्त किया जाएगा, लेकिन इस सवाल के प्रयोजन के लिए, मैं एक ObservableCollection जोड़ लिया है), जो

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; } 
} 

शामिल मेरी XAML कोड में मैं

है
<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}}" /> 

मैं गतिशील क्या परिणाम रहा वस्तु से प्राप्त किया है के संबंध में लेबल की पृष्ठभूमि का रंग निर्धारित करने की कोशिश कर रहा हूँ।

अगर आपको यह पता है कि इसे कैसे करना है, तो कृपया मुझे बताएं। मैं उपलब्ध किसी भी उपयोगी विकल्प की तलाश में हूं।

उत्तर

10

आपको शायद ValueConverter की आवश्यकता है। अब आप क्या कर रहे हैं पृष्ठभूमि रंग को 'शायद', 'नहीं' या 'हां' पर सेट कर रहा है, जो स्पष्ट रूप से रंग नहीं है।

आपको जो करना है वह उस रंग को रंग में परिवर्तित करना है। आप इसे इस तरह कर सकते हैं।

IValueConverter इंटरफ़ेस लागू करने वाली एक नई कक्षा बनाएं।

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(); 
    } 
} 

तो इस तरह से अपनी XAML पृष्ठ पर एक स्थिर संसाधन के रूप में इस वर्ग को जोड़ने:

<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> 

अब आप अपने आप बंधन में क्या कनवर्टर का उपयोग करने के लिए उसे बताना है यह शायद कुछ इस तरह दिखेगा । इस तरह करें:

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

अब यह Result क्षेत्र में मूल्य देख कनवर्टर आप को परिभाषित किया है के माध्यम से डाल दिया और रंग है कि आप उस मूल्य के अनुरूप था लौटना चाहिए।

+0

इसके लिए धन्यवाद! – rkc88