2008-12-21 15 views
7

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

मैं बस सिस्टम पर बाध्य करने के लिए नियंत्रण पर दृश्यमान संपत्ति सेट करना चाहता हूं। कोड-पीछे में दृश्यता गुण। लेकिन यह काम नहीं करना प्रतीत होता है।

<Grid x:Name="actions" Visibility="{Binding Path=ActionsVisible, UpdateSourceTrigger=PropertyChanged}" /> 

इस संपत्ति के लिए कोड है::

यह मेरी XAML है

base.DataContext = this; 
:

private Visibility _actionsVisible; 
public Visibility ActionsVisible 
{ 
    get 
    { 
     return _actionsVisible; 
    } 
    set 
    { 
     _actionsVisible = value; 
    } 
} 

खिड़की के निर्माता में, मैं भी इस फोन है

जब मैं या तो क्रियाएं अक्षम करता हूं या यह। क्रियाएँ। दृश्यता, स्थिति स्थानांतरित नहीं होती है। क्या गलत हो सकता है के लिए कोई विचार?

+0

आप धागा है जिस पर वे बनाए गए थे पर सभी नियंत्रण का उपयोग करने के लिए है। आप अन्य धागे से नियंत्रण अपडेट कर सकते हैं, लेकिन आपको WPF डिस्पैचर का उपयोग करके यूआई थ्रेड के माध्यम से अद्यतन को मार्शल करना होगा। यह [लेख] (http://msdn.microsoft.com/en-us/magazine/cc163328.aspx) मदद करनी चाहिए। –

उत्तर

7

मुझे लगता है कि समस्या यह है कि डब्ल्यूपीएफ यह नहीं जान सकता कि आपकी क्रियाएं अदृश्य संपत्ति बदल गई हैं क्योंकि आपने इस तथ्य को अधिसूचित नहीं किया है।

आपकी कक्षा को एंटिविटीप्रॉपर्टी को लागू करने की आवश्यकता होगी, फिर क्रियाओं के लिए अपनी सेट विधि में आपको एक्टिव चेंजेड ईवेंट को एक्शन विज़िबल के साथ संपत्ति नाम के रूप में बदलना होगा।

आशा इस मदद करता है ...

+0

मैं ऐसा करने के खिलाफ नहीं हूं, लेकिन मेरे पास कोड-बैक में स्ट्रिंग प्रॉपर्टी के लिए एक टेक्स्टबॉक्स भी है और यह INotifyPropertyChanged ईवेंट के बिना काम करता है। मैंने सोचा कि UpdateSourceTrigger को PropertyChanged पर सेट करके मुझे INotifyPropertyChanged का उपयोग करने की आवश्यकता नहीं होगी। – Jared

+0

यह सुनिश्चित नहीं है कि यह तब कैसे करता है! क्या आप अपना अधिक कोड पोस्ट करना चाहते हैं? UpdateSourceTrigger प्रॉपर्टी केवल तब नियंत्रित होती है जब स्रोत (यानी वह संपत्ति जिसे आप बाध्यकारी कर रहे हैं) अपडेट हो जाता है। इसका आपके दृश्यता संपत्ति पर कोई प्रभाव नहीं पड़ेगा। –

+0

धन्यवाद क्रेग। मुझे अपनी पिछली टिप्पणी पर और अधिक स्पष्ट होना चाहिए था। मेरा कहना था कि मेरे पास टेक्स्टबॉक्स की टेक्स्ट प्रॉपर्टी है जो कोड-बैक में स्ट्रिंग प्रॉपर्टी से जुड़ी है। यह काम करता है और यदि आप अभी भी इसके लिए स्रोत देखना चाहते हैं तो मुझे बताएं। – Jared

8

एक DependencyProperty होने के लिए अपनी संपत्ति बदलें। यह आपके लिए अद्यतन को संभालेगा।

 public Visibility ActionsVisible 
    { 
     get { return (Visibility)GetValue(ActionsVisibleProperty); } 
     set { SetValue(ActionsVisibleProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for ActionsVisible. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty ActionsVisibleProperty = 
     DependencyProperty.Register("ActionsVisible", typeof(Visibility), typeof(FooForm)); 
+0

इस कोड को थ्रेड के अलावा किसी थ्रेड में चलाने पर, अपवाद है। मैं जिस बाध्यकारी में स्थानांतरित हुआ था वह यूआई तत्वों को एकाधिक धागे से अद्यतन करने की अनुमति देना था। ऐसा लगता है कि यह समाधान मेरे लिए काम नहीं करेगा अगर इसे एक थ्रेड पर चलाना है। – Jared

1

लिखें: NotifyPropertyChanged("ActionsVisible")

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