2009-11-03 10 views
13

मैं एक छवि एक बूलियन करने के लिए बाध्य करना चाहते हैं और चित्र का स्रोत बूलियन मान पर निर्भर रहनाबाध्य छवि। बूलेन के अनुसार एक कनवर्टर के बिना स्रोत?

यानी सही स्रोत = "Image1" झूठे स्रोत = "Image2"

मैं अगर सोच रहा था कनवर्टर की आवश्यकता के बिना इनलाइन करने का एक तरीका है।

उत्तर

40

आप छवि पर एक शैली बना सकते हैं जो बाध्यकारी के आधार पर छवि स्रोत को स्वैप करने के लिए डेटा ट्रिगर का उपयोग करता है। इस उदाहरण में छवि एक बूलियन के मूल्य के आधार पर बदलती है जिसे "मूल्य" कहा जाता है।

<Image Width="16"> 
     <Image.Style> 
      <Style TargetType="{x:Type Image}"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Value}" Value="False"> 
         <Setter Property="Source" Value="Resources/image1.png"/> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding Value}" Value="True"> 
         <Setter Property="Source" Value="Resources/image2.png"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Image.Style> 
    </Image> 
+0

क्या यह एक अलग तत्वों के गुणों के लिए काम करता है? उदाहरण के लिए, यदि मैं किसी लेबल के मान के आधार पर एक छवि को बांधना चाहता हूं, तो क्या वह वही काम करेगा? क्या आप विस्तारित कर सकते हैं? – user3841581

0

यदि आप सीधे Image::Source संपत्ति को बाध्यकारी कर रहे हैं तो इसे पूरा करने का एकमात्र तरीका कस्टम IValueConverter के साथ है।

2

यदि कोई बाध्यकारी के लिए मूल्य कनवर्टर की तलाश में है। यहाँ मैं

<Image Source="{Binding Converter={StaticResource ImageConverter},ConverterParameter=\{Status\}}" /> 

public class StatusToImageConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     string statusValue = parameter.ToString().ToUpper(); 

     if (!string.IsNullOrEmpty(statusValue)) 
     { 
      string result = string.Empty; 

      switch (statusValue) 
      { 
       case "IDLE": 
        result = "idle.png"; 
        break; 
       case "OFFLINE": 
        result = "offline.png"; 
        break; 
       default: 
        result = "online.png"; 
        break; 
      } 

      var uri = new Uri("pack://application:,,,/PIE;component/Images/" + result); 

      return uri; 
     } 

     return string.Empty; 
    } 

    // No need to implement converting back on a one-way binding 
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return DependencyProperty.UnsetValue; 
    } 
} 

घिरा Enum

public enum DevStatus 
{ 
    Idle = 1, 
    Offline = 2, 
    Active = 3, 
} 

सेट Enum क्या इस्तेमाल किया ViewModel और कनवर्टर से उचित छवि के लिए बाध्य नहीं है।

<Image Source="{Binding DevStatus, Converter={StaticResource ImageConverter}}" /> 
+0

क्या आप कनवर्टर पैरामीटर = \ {स्थिति \} भाग को समझा सकते हैं? – user3841581

+0

मेरे मामले में अपने एक enum मूल्य सार्वजनिक enum DeviceStatus { निष्क्रिय = 1, ऑफलाइन = 2, सक्रिय = 3, } – dnxit

+0

<छवि स्रोत = "{DevStatus बाइंडिंग, कनवर्टर = {StaticResource ImageConverter}}" /> – dnxit

संबंधित मुद्दे