2010-09-07 6 views
8

मैं अपने सिल्वरलाइट ऐप में एमवीवीएम का उपयोग कर रहा हूं। नियंत्रण दृश्यता डेटा द्वारा प्रबंधित किए जाने की जरूरत है, मैं अपनी 'दृश्यता' संपत्ति जोड़ने हूँ आपत्ति उठाने के इसी गुण:सिल्वरलाइट 4: नियंत्रण दृश्यता को कैसे स्विच करें

XAML:

<TextBlock Text="Price" Visibility="{Binding PriceVisibility, Mode=OneWay}"/> 
<TextBox Text="{Binding TicketPrice, Mode=TwoWay}" Visibility="{Binding PriceVisibility, Mode=OneWay}"/> 

codebehind (सी #):

public string PriceVisibility { get { return PriceVisible ? "Visible" : "Collapsed"; } } 

लेकिन मेरे परिप्रेक्ष्य से, दृश्यता संपत्ति का लौटने का स्ट्रिंग प्रतिनिधित्व सबसे अच्छा तरीका नहीं है।

क्या आप सलाह दे सकते हैं कि कोई बेहतर तरीका है या नहीं?

धन्यवाद!

उत्तर

9

मैं सिर्फ परावर्तक इस्तेमाल किया PresentationFramework.dll

वहां पहले से ही एक कार्यान्वयन कि बूलियन और दृश्यता के बीच में बदल सकते हैं है में टाइप कन्वर्टर्स निरीक्षण करने के लिए। आप अपने Silverlight आवेदन में इसका उपयोग करने में सक्षम होना चाहिए।

public sealed class BooleanToVisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     bool flag = false; 
     if (value is bool) 
     { 
      flag = (bool) value; 
     } 
     else if (value is bool?) 
     { 
      bool? nullable = (bool?) value; 
      flag = nullable.HasValue ? nullable.Value : false; 
     } 
     return (flag ? Visibility.Visible : Visibility.Collapsed); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return ((value is Visibility) && (((Visibility) value) == Visibility.Visible)); 
    } 
} 
+2

उदाहरण के लिए धन्यवाद। क्या आप जानते हैं कि रीशेर्पर क्यों कहता है: "शून्य। हसवेल्यू" हमेशा सच है? – Budda

5

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

अपने एप्लिकेशन में निम्न वर्ग जोड़ें:

public class BoolVisibilityConverter : IValueConverter{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture){ 
     bool isVisible = (bool)value; 
     return isVisible ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){ 
     System.Windows.Visibility currVisibility = (System.Windows.Visibility)value; 
     return (currVisibility == System.Windows.Visibility.Visible); 
    } 
} 

अब यह उपयोग करने के लिए आप अपने XAML कोड में एक संसाधन के रूप में यह जोड़ने की आवश्यकता होगी।

<UserControl.Resources> 
    <Helpers:BoolVisibilityConverter x:Key="boolVisibilityConverter" /> 
</UserControl.Resources> 

अपने उदाहरण में निम्नलिखित का उपयोग करें:

<TextBlock Text="Price" Visibility="{Binding PriceVisibility, Mode=OneWay, Converter={StaticResource boolVisibilityConverter}}"/> 

<TextBox Text="{Binding TicketPrice, Mode=TwoWay}" Visibility="{Binding PriceVisibility, Mode=OneWay, Converter={StaticResource boolVisibilityConverter}}"/> 
+0

पूर्ण उदाहरण के लिए धन्यवाद (मुझे XAML मार्कअप के बारे में भी पता नहीं था)। – Budda

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